cool.io 1.9.0 → 1.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/ext/cool.io/buffer.c +30 -23
- data/ext/cool.io/cool.io.h +3 -0
- data/ext/cool.io/iowatcher.c +1 -1
- data/ext/cool.io/loop.c +28 -14
- data/ext/cool.io/stat_watcher.c +4 -4
- data/ext/cool.io/timer_watcher.c +5 -5
- data/ext/cool.io/watcher.c +30 -17
- data/ext/cool.io/watcher.h +8 -8
- data/lib/cool.io/dns_resolver.rb +1 -1
- data/lib/cool.io/version.rb +1 -1
- metadata +3 -6
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 1d38b3958d9ad5505fb4a53ded526d2ab347d46200a567a9aa0681cc5ca487cc
|
|
4
|
+
data.tar.gz: 42cb1b75db2c409dfc48756b8df29663675e31a104d03c37bbbfce9344592d6d
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 6e3358de317e34735ca0f264c75f93d34d38325482c02eabf4d1289b3c44ef6557918bd59078a34c809322d69d05299ccb58f89db630c4054dc0162de8ab49b6
|
|
7
|
+
data.tar.gz: 775568343fe8788adbc43757a6f06ef5474e1d19477571317f29e21ff3da777d8567a6401377c6eb854e9f0c4060d97da7c84dafa56dc1e772f636417365d338
|
data/ext/cool.io/buffer.c
CHANGED
|
@@ -47,8 +47,8 @@ static VALUE mCoolio = Qnil;
|
|
|
47
47
|
static VALUE cCoolio_Buffer = Qnil;
|
|
48
48
|
|
|
49
49
|
static VALUE Coolio_Buffer_allocate(VALUE klass);
|
|
50
|
-
static void Coolio_Buffer_mark(
|
|
51
|
-
static void Coolio_Buffer_free(
|
|
50
|
+
static void Coolio_Buffer_mark(void *);
|
|
51
|
+
static void Coolio_Buffer_free(void *);
|
|
52
52
|
|
|
53
53
|
static VALUE Coolio_Buffer_default_node_size(VALUE klass);
|
|
54
54
|
static VALUE Coolio_Buffer_set_default_node_size(VALUE klass, VALUE size);
|
|
@@ -64,7 +64,7 @@ static VALUE Coolio_Buffer_to_str(VALUE self);
|
|
|
64
64
|
static VALUE Coolio_Buffer_read_from(VALUE self, VALUE io);
|
|
65
65
|
static VALUE Coolio_Buffer_write_to(VALUE self, VALUE io);
|
|
66
66
|
|
|
67
|
-
static struct buffer *
|
|
67
|
+
static struct buffer *buffer_init(struct buffer *);
|
|
68
68
|
static void buffer_clear(struct buffer * buf);
|
|
69
69
|
static void buffer_free(struct buffer * buf);
|
|
70
70
|
static void buffer_free_pool(struct buffer * buf);
|
|
@@ -86,8 +86,6 @@ static int buffer_write_to(struct buffer * buf, int fd);
|
|
|
86
86
|
void
|
|
87
87
|
Init_coolio_buffer()
|
|
88
88
|
{
|
|
89
|
-
VALUE cCoolio_IO;
|
|
90
|
-
|
|
91
89
|
mCoolio = rb_define_module("Coolio");
|
|
92
90
|
cCoolio_Buffer = rb_define_class_under(mCoolio, "Buffer", rb_cObject);
|
|
93
91
|
rb_define_alloc_func(cCoolio_Buffer, Coolio_Buffer_allocate);
|
|
@@ -114,21 +112,33 @@ Init_coolio_buffer()
|
|
|
114
112
|
rb_define_const(cCoolio_Buffer, "MAX_SIZE", INT2NUM(MAX_BUFFER_SIZE));
|
|
115
113
|
}
|
|
116
114
|
|
|
115
|
+
static const rb_data_type_t Coolio_Buffer_type = {
|
|
116
|
+
"Coolio::Buffer",
|
|
117
|
+
{
|
|
118
|
+
Coolio_Buffer_mark,
|
|
119
|
+
Coolio_Buffer_free,
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
|
|
117
123
|
static VALUE
|
|
118
124
|
Coolio_Buffer_allocate(VALUE klass)
|
|
119
125
|
{
|
|
120
|
-
|
|
126
|
+
struct buffer *buf;
|
|
127
|
+
VALUE buffer = TypedData_Make_Struct(klass, struct buffer, &Coolio_Buffer_type, buf);
|
|
128
|
+
|
|
129
|
+
buffer_init(buf);
|
|
130
|
+
return buffer;
|
|
121
131
|
}
|
|
122
132
|
|
|
123
133
|
static void
|
|
124
|
-
Coolio_Buffer_mark(
|
|
134
|
+
Coolio_Buffer_mark(void *buf)
|
|
125
135
|
{
|
|
126
136
|
/* Naively discard the memory pool whenever Ruby garbage collects */
|
|
127
137
|
buffer_free_pool(buf);
|
|
128
138
|
}
|
|
129
139
|
|
|
130
140
|
static void
|
|
131
|
-
Coolio_Buffer_free(
|
|
141
|
+
Coolio_Buffer_free(void * buf)
|
|
132
142
|
{
|
|
133
143
|
buffer_free(buf);
|
|
134
144
|
}
|
|
@@ -188,7 +198,7 @@ Coolio_Buffer_initialize(int argc, VALUE * argv, VALUE self)
|
|
|
188
198
|
struct buffer *buf;
|
|
189
199
|
|
|
190
200
|
if (rb_scan_args(argc, argv, "01", &node_size_obj) == 1) {
|
|
191
|
-
|
|
201
|
+
TypedData_Get_Struct(self, struct buffer, &Coolio_Buffer_type, buf);
|
|
192
202
|
|
|
193
203
|
/*
|
|
194
204
|
* Make sure we're not changing the buffer size after data
|
|
@@ -212,7 +222,7 @@ static VALUE
|
|
|
212
222
|
Coolio_Buffer_clear(VALUE self)
|
|
213
223
|
{
|
|
214
224
|
struct buffer *buf;
|
|
215
|
-
|
|
225
|
+
TypedData_Get_Struct(self, struct buffer, &Coolio_Buffer_type, buf);
|
|
216
226
|
|
|
217
227
|
buffer_clear(buf);
|
|
218
228
|
|
|
@@ -229,7 +239,7 @@ static VALUE
|
|
|
229
239
|
Coolio_Buffer_size(VALUE self)
|
|
230
240
|
{
|
|
231
241
|
struct buffer *buf;
|
|
232
|
-
|
|
242
|
+
TypedData_Get_Struct(self, struct buffer, &Coolio_Buffer_type, buf);
|
|
233
243
|
|
|
234
244
|
return INT2NUM(buf->size);
|
|
235
245
|
}
|
|
@@ -244,7 +254,7 @@ static VALUE
|
|
|
244
254
|
Coolio_Buffer_empty(VALUE self)
|
|
245
255
|
{
|
|
246
256
|
struct buffer *buf;
|
|
247
|
-
|
|
257
|
+
TypedData_Get_Struct(self, struct buffer, &Coolio_Buffer_type, buf);
|
|
248
258
|
|
|
249
259
|
return buf->size > 0 ? Qfalse : Qtrue;
|
|
250
260
|
}
|
|
@@ -259,7 +269,7 @@ static VALUE
|
|
|
259
269
|
Coolio_Buffer_append(VALUE self, VALUE data)
|
|
260
270
|
{
|
|
261
271
|
struct buffer *buf;
|
|
262
|
-
|
|
272
|
+
TypedData_Get_Struct(self, struct buffer, &Coolio_Buffer_type, buf);
|
|
263
273
|
|
|
264
274
|
/* Is this needed? Never seen anyone else do it... */
|
|
265
275
|
data = rb_convert_type(data, T_STRING, "String", "to_str");
|
|
@@ -278,7 +288,7 @@ static VALUE
|
|
|
278
288
|
Coolio_Buffer_prepend(VALUE self, VALUE data)
|
|
279
289
|
{
|
|
280
290
|
struct buffer *buf;
|
|
281
|
-
|
|
291
|
+
TypedData_Get_Struct(self, struct buffer, &Coolio_Buffer_type, buf);
|
|
282
292
|
|
|
283
293
|
data = rb_convert_type(data, T_STRING, "String", "to_str");
|
|
284
294
|
buffer_prepend(buf, RSTRING_PTR(data), RSTRING_LEN(data));
|
|
@@ -304,7 +314,7 @@ Coolio_Buffer_read(int argc, VALUE * argv, VALUE self)
|
|
|
304
314
|
int length;
|
|
305
315
|
struct buffer *buf;
|
|
306
316
|
|
|
307
|
-
|
|
317
|
+
TypedData_Get_Struct(self, struct buffer, &Coolio_Buffer_type, buf);
|
|
308
318
|
|
|
309
319
|
if (rb_scan_args(argc, argv, "01", &length_obj) == 1) {
|
|
310
320
|
length = NUM2INT(length_obj);
|
|
@@ -340,7 +350,7 @@ Coolio_Buffer_read_frame(VALUE self, VALUE data, VALUE mark)
|
|
|
340
350
|
char mark_c = (char) NUM2INT(mark);
|
|
341
351
|
struct buffer *buf;
|
|
342
352
|
|
|
343
|
-
|
|
353
|
+
TypedData_Get_Struct(self, struct buffer, &Coolio_Buffer_type, buf);
|
|
344
354
|
|
|
345
355
|
if (buffer_read_frame(buf, data, mark_c)) {
|
|
346
356
|
return Qtrue;
|
|
@@ -361,7 +371,7 @@ Coolio_Buffer_to_str(VALUE self)
|
|
|
361
371
|
VALUE str;
|
|
362
372
|
struct buffer *buf;
|
|
363
373
|
|
|
364
|
-
|
|
374
|
+
TypedData_Get_Struct(self, struct buffer, &Coolio_Buffer_type, buf);
|
|
365
375
|
|
|
366
376
|
str = rb_str_new(0, buf->size);
|
|
367
377
|
buffer_copy(buf, RSTRING_PTR(str), buf->size);
|
|
@@ -388,7 +398,7 @@ Coolio_Buffer_read_from(VALUE self, VALUE io)
|
|
|
388
398
|
OpenFile *fptr;
|
|
389
399
|
#endif
|
|
390
400
|
|
|
391
|
-
|
|
401
|
+
TypedData_Get_Struct(self, struct buffer, &Coolio_Buffer_type, buf);
|
|
392
402
|
io = rb_convert_type(io, T_FILE, "IO", "to_io");
|
|
393
403
|
GetOpenFile(io, fptr);
|
|
394
404
|
rb_io_set_nonblock(fptr);
|
|
@@ -419,7 +429,7 @@ Coolio_Buffer_write_to(VALUE self, VALUE io)
|
|
|
419
429
|
OpenFile *fptr;
|
|
420
430
|
#endif
|
|
421
431
|
|
|
422
|
-
|
|
432
|
+
TypedData_Get_Struct(self, struct buffer, &Coolio_Buffer_type, buf);
|
|
423
433
|
io = rb_convert_type(io, T_FILE, "IO", "to_io");
|
|
424
434
|
GetOpenFile(io, fptr);
|
|
425
435
|
rb_io_set_nonblock(fptr);
|
|
@@ -438,11 +448,8 @@ Coolio_Buffer_write_to(VALUE self, VALUE io)
|
|
|
438
448
|
|
|
439
449
|
/* Create a new buffer */
|
|
440
450
|
static struct buffer *
|
|
441
|
-
|
|
451
|
+
buffer_init(struct buffer *buf)
|
|
442
452
|
{
|
|
443
|
-
struct buffer *buf;
|
|
444
|
-
|
|
445
|
-
buf = (struct buffer *) xmalloc(sizeof(struct buffer));
|
|
446
453
|
buf->head = buf->tail = buf->pool_head = buf->pool_tail = 0;
|
|
447
454
|
buf->size = 0;
|
|
448
455
|
buf->node_size = default_node_size;
|
data/ext/cool.io/cool.io.h
CHANGED
data/ext/cool.io/iowatcher.c
CHANGED
|
@@ -82,7 +82,7 @@ static VALUE Coolio_IOWatcher_initialize(int argc, VALUE *argv, VALUE self)
|
|
|
82
82
|
else
|
|
83
83
|
rb_raise(rb_eArgError, "invalid event type: '%s' (must be 'r', 'w', or 'rw')", flags_str);
|
|
84
84
|
|
|
85
|
-
|
|
85
|
+
watcher_data = Coolio_Watcher_ptr(self);
|
|
86
86
|
io = rb_convert_type(io, T_FILE, "IO", "to_io");
|
|
87
87
|
|
|
88
88
|
watcher_data->dispatch_callback = Coolio_IOWatcher_dispatch_callback;
|
data/ext/cool.io/loop.c
CHANGED
|
@@ -14,8 +14,7 @@ static VALUE mCoolio = Qnil;
|
|
|
14
14
|
static VALUE cCoolio_Loop = Qnil;
|
|
15
15
|
|
|
16
16
|
static VALUE Coolio_Loop_allocate(VALUE klass);
|
|
17
|
-
static void
|
|
18
|
-
static void Coolio_Loop_free(struct Coolio_Loop *loop);
|
|
17
|
+
static void Coolio_Loop_free(void *data);
|
|
19
18
|
|
|
20
19
|
static VALUE Coolio_Loop_ev_loop_new(VALUE self, VALUE flags);
|
|
21
20
|
static VALUE Coolio_Loop_run_once(int argc, VALUE *argv, VALUE self);
|
|
@@ -47,9 +46,26 @@ void Init_coolio_loop()
|
|
|
47
46
|
rb_define_method(cCoolio_Loop, "run_nonblock", Coolio_Loop_run_nonblock, 0);
|
|
48
47
|
}
|
|
49
48
|
|
|
49
|
+
static const rb_data_type_t Coolio_Loop_type = {
|
|
50
|
+
"Coolio::Loop",
|
|
51
|
+
{
|
|
52
|
+
NULL,
|
|
53
|
+
Coolio_Loop_free,
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
struct Coolio_Loop *Coolio_Loop_ptr(VALUE self)
|
|
58
|
+
{
|
|
59
|
+
struct Coolio_Loop *loop;
|
|
60
|
+
|
|
61
|
+
TypedData_Get_Struct(self, struct Coolio_Loop, &Coolio_Loop_type, loop);
|
|
62
|
+
return loop;
|
|
63
|
+
}
|
|
64
|
+
|
|
50
65
|
static VALUE Coolio_Loop_allocate(VALUE klass)
|
|
51
66
|
{
|
|
52
|
-
struct Coolio_Loop *loop
|
|
67
|
+
struct Coolio_Loop *loop;
|
|
68
|
+
VALUE obj = TypedData_Make_Struct(klass, struct Coolio_Loop, &Coolio_Loop_type, loop);
|
|
53
69
|
|
|
54
70
|
loop->ev_loop = 0;
|
|
55
71
|
ev_init(&loop->timer, Coolio_Loop_timeout_callback);
|
|
@@ -58,15 +74,13 @@ static VALUE Coolio_Loop_allocate(VALUE klass)
|
|
|
58
74
|
loop->eventbuf_size = DEFAULT_EVENTBUF_SIZE;
|
|
59
75
|
loop->eventbuf = (struct Coolio_Event *)xmalloc(sizeof(struct Coolio_Event) * DEFAULT_EVENTBUF_SIZE);
|
|
60
76
|
|
|
61
|
-
return
|
|
77
|
+
return obj;
|
|
62
78
|
}
|
|
63
79
|
|
|
64
|
-
static void
|
|
80
|
+
static void Coolio_Loop_free(void *data)
|
|
65
81
|
{
|
|
66
|
-
|
|
82
|
+
struct Coolio_Loop *loop = data;
|
|
67
83
|
|
|
68
|
-
static void Coolio_Loop_free(struct Coolio_Loop *loop)
|
|
69
|
-
{
|
|
70
84
|
if(!loop->ev_loop)
|
|
71
85
|
return;
|
|
72
86
|
|
|
@@ -80,7 +94,7 @@ static void Coolio_Loop_free(struct Coolio_Loop *loop)
|
|
|
80
94
|
static VALUE Coolio_Loop_ev_loop_new(VALUE self, VALUE flags)
|
|
81
95
|
{
|
|
82
96
|
struct Coolio_Loop *loop_data;
|
|
83
|
-
|
|
97
|
+
loop_data = Coolio_Loop_ptr(self);
|
|
84
98
|
|
|
85
99
|
if(loop_data->ev_loop)
|
|
86
100
|
rb_raise(rb_eRuntimeError, "loop already initialized");
|
|
@@ -98,8 +112,8 @@ void Coolio_Loop_process_event(VALUE watcher, int revents)
|
|
|
98
112
|
|
|
99
113
|
/* The Global VM lock isn't held right now, but hopefully
|
|
100
114
|
* we can still do this safely */
|
|
101
|
-
|
|
102
|
-
|
|
115
|
+
watcher_data = Coolio_Watcher_ptr(watcher);
|
|
116
|
+
loop_data = Coolio_Loop_ptr(watcher_data->loop);
|
|
103
117
|
|
|
104
118
|
/* Well, what better place to explain how this all works than
|
|
105
119
|
* where the most wonky and convoluted stuff is going on!
|
|
@@ -184,7 +198,7 @@ static VALUE Coolio_Loop_run_once(int argc, VALUE *argv, VALUE self)
|
|
|
184
198
|
rb_raise(rb_eArgError, "time interval must be positive");
|
|
185
199
|
}
|
|
186
200
|
|
|
187
|
-
|
|
201
|
+
loop_data = Coolio_Loop_ptr(self);
|
|
188
202
|
|
|
189
203
|
assert(loop_data->ev_loop && !loop_data->events_received);
|
|
190
204
|
|
|
@@ -222,7 +236,7 @@ static VALUE Coolio_Loop_run_nonblock(VALUE self)
|
|
|
222
236
|
struct Coolio_Loop *loop_data;
|
|
223
237
|
VALUE nevents;
|
|
224
238
|
|
|
225
|
-
|
|
239
|
+
loop_data = Coolio_Loop_ptr(self);
|
|
226
240
|
|
|
227
241
|
assert(loop_data->ev_loop && !loop_data->events_received);
|
|
228
242
|
|
|
@@ -247,7 +261,7 @@ static void Coolio_Loop_dispatch_events(struct Coolio_Loop *loop_data)
|
|
|
247
261
|
if(loop_data->eventbuf[i].watcher == Qnil)
|
|
248
262
|
continue;
|
|
249
263
|
|
|
250
|
-
|
|
264
|
+
watcher_data = Coolio_Watcher_ptr(loop_data->eventbuf[i].watcher);
|
|
251
265
|
watcher_data->dispatch_callback(loop_data->eventbuf[i].watcher, loop_data->eventbuf[i].revents);
|
|
252
266
|
}
|
|
253
267
|
}
|
data/ext/cool.io/stat_watcher.c
CHANGED
|
@@ -89,7 +89,7 @@ static VALUE Coolio_StatWatcher_initialize(int argc, VALUE *argv, VALUE self)
|
|
|
89
89
|
path = rb_String(path);
|
|
90
90
|
rb_iv_set(self, "@path", path);
|
|
91
91
|
|
|
92
|
-
|
|
92
|
+
watcher_data = Coolio_Watcher_ptr(self);
|
|
93
93
|
|
|
94
94
|
watcher_data->dispatch_callback = Coolio_StatWatcher_dispatch_callback;
|
|
95
95
|
ev_stat_init(
|
|
@@ -119,8 +119,8 @@ static VALUE Coolio_StatWatcher_attach(VALUE self, VALUE loop)
|
|
|
119
119
|
if(!rb_obj_is_kind_of(loop, cCoolio_Loop))
|
|
120
120
|
rb_raise(rb_eArgError, "expected loop to be an instance of Coolio::Loop, not %s", RSTRING_PTR(rb_inspect(loop)));
|
|
121
121
|
|
|
122
|
-
|
|
123
|
-
|
|
122
|
+
loop_data = Coolio_Loop_ptr(loop);
|
|
123
|
+
watcher_data = Coolio_Watcher_ptr(self);
|
|
124
124
|
|
|
125
125
|
if(watcher_data->loop != Qnil)
|
|
126
126
|
Coolio_StatWatcher_detach(self);
|
|
@@ -206,7 +206,7 @@ static void Coolio_StatWatcher_libev_callback(struct ev_loop *ev_loop, struct ev
|
|
|
206
206
|
static void Coolio_StatWatcher_dispatch_callback(VALUE self, int revents)
|
|
207
207
|
{
|
|
208
208
|
struct Coolio_Watcher *watcher_data;
|
|
209
|
-
|
|
209
|
+
watcher_data = Coolio_Watcher_ptr(self);
|
|
210
210
|
|
|
211
211
|
VALUE previous_statdata = Coolio_StatInfo_build(&watcher_data->event_types.ev_stat.prev);
|
|
212
212
|
VALUE current_statdata = Coolio_StatInfo_build(&watcher_data->event_types.ev_stat.attr);
|
data/ext/cool.io/timer_watcher.c
CHANGED
|
@@ -68,7 +68,7 @@ static VALUE Coolio_TimerWatcher_initialize(int argc, VALUE *argv, VALUE self)
|
|
|
68
68
|
rb_iv_set(self, "@interval", interval);
|
|
69
69
|
rb_iv_set(self, "@repeating", repeating);
|
|
70
70
|
|
|
71
|
-
|
|
71
|
+
watcher_data = Coolio_Watcher_ptr(self);
|
|
72
72
|
|
|
73
73
|
watcher_data->dispatch_callback = Coolio_TimerWatcher_dispatch_callback;
|
|
74
74
|
ev_timer_init(
|
|
@@ -98,8 +98,8 @@ static VALUE Coolio_TimerWatcher_attach(VALUE self, VALUE loop)
|
|
|
98
98
|
if(!rb_obj_is_kind_of(loop, cCoolio_Loop))
|
|
99
99
|
rb_raise(rb_eArgError, "expected loop to be an instance of Coolio::Loop, not %s", RSTRING_PTR(rb_inspect(loop)));
|
|
100
100
|
|
|
101
|
-
|
|
102
|
-
|
|
101
|
+
loop_data = Coolio_Loop_ptr(loop);
|
|
102
|
+
watcher_data = Coolio_Watcher_ptr(self);
|
|
103
103
|
|
|
104
104
|
if(watcher_data->loop != Qnil)
|
|
105
105
|
Coolio_TimerWatcher_detach(self);
|
|
@@ -180,12 +180,12 @@ static VALUE Coolio_TimerWatcher_reset(VALUE self)
|
|
|
180
180
|
struct Coolio_Watcher *watcher_data;
|
|
181
181
|
struct Coolio_Loop *loop_data;
|
|
182
182
|
|
|
183
|
-
|
|
183
|
+
watcher_data = Coolio_Watcher_ptr(self);
|
|
184
184
|
|
|
185
185
|
if(watcher_data->loop == Qnil)
|
|
186
186
|
rb_raise(rb_eRuntimeError, "not attached to a loop");
|
|
187
187
|
|
|
188
|
-
|
|
188
|
+
loop_data = Coolio_Loop_ptr(watcher_data->loop);
|
|
189
189
|
|
|
190
190
|
ev_timer_again(loop_data->ev_loop, &watcher_data->event_types.ev_timer);
|
|
191
191
|
|
data/ext/cool.io/watcher.c
CHANGED
|
@@ -13,8 +13,7 @@ static VALUE mCoolio = Qnil;
|
|
|
13
13
|
static VALUE cCoolio_Watcher = Qnil;
|
|
14
14
|
|
|
15
15
|
static VALUE Coolio_Watcher_allocate(VALUE klass);
|
|
16
|
-
static void Coolio_Watcher_mark(
|
|
17
|
-
static void Coolio_Watcher_free(struct Coolio_Watcher *watcher);
|
|
16
|
+
static void Coolio_Watcher_mark(void *data);
|
|
18
17
|
|
|
19
18
|
static VALUE Coolio_Watcher_initialize(VALUE self);
|
|
20
19
|
static VALUE Coolio_Watcher_attach(VALUE self, VALUE loop);
|
|
@@ -53,27 +52,41 @@ void Init_coolio_watcher()
|
|
|
53
52
|
rb_define_method(cCoolio_Watcher, "enabled?", Coolio_Watcher_enabled, 0);
|
|
54
53
|
}
|
|
55
54
|
|
|
55
|
+
static const rb_data_type_t Coolio_Watcher_type = {
|
|
56
|
+
"Coolio::Watcher",
|
|
57
|
+
{
|
|
58
|
+
Coolio_Watcher_mark,
|
|
59
|
+
RUBY_DEFAULT_FREE,
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
struct Coolio_Watcher *Coolio_Watcher_ptr(VALUE watcher)
|
|
64
|
+
{
|
|
65
|
+
struct Coolio_Watcher *watcher_data;
|
|
66
|
+
|
|
67
|
+
TypedData_Get_Struct(watcher, struct Coolio_Watcher, &Coolio_Watcher_type, watcher_data);
|
|
68
|
+
return watcher_data;
|
|
69
|
+
}
|
|
70
|
+
|
|
56
71
|
static VALUE Coolio_Watcher_allocate(VALUE klass)
|
|
57
72
|
{
|
|
58
|
-
struct Coolio_Watcher *watcher_data
|
|
73
|
+
struct Coolio_Watcher *watcher_data;
|
|
74
|
+
VALUE watcher = TypedData_Make_Struct(klass, struct Coolio_Watcher, &Coolio_Watcher_type, watcher_data);
|
|
59
75
|
|
|
60
76
|
watcher_data->loop = Qnil;
|
|
61
77
|
watcher_data->enabled = 0;
|
|
62
78
|
|
|
63
|
-
return
|
|
79
|
+
return watcher;
|
|
64
80
|
}
|
|
65
81
|
|
|
66
|
-
static void Coolio_Watcher_mark(
|
|
82
|
+
static void Coolio_Watcher_mark(void *data)
|
|
67
83
|
{
|
|
84
|
+
struct Coolio_Watcher *watcher_data = data;
|
|
85
|
+
|
|
68
86
|
if(watcher_data->loop != Qnil)
|
|
69
87
|
rb_gc_mark(watcher_data->loop);
|
|
70
88
|
}
|
|
71
89
|
|
|
72
|
-
static void Coolio_Watcher_free(struct Coolio_Watcher *watcher_data)
|
|
73
|
-
{
|
|
74
|
-
xfree(watcher_data);
|
|
75
|
-
}
|
|
76
|
-
|
|
77
90
|
static VALUE Coolio_Watcher_initialize(VALUE self)
|
|
78
91
|
{
|
|
79
92
|
rb_raise(rb_eRuntimeError, "watcher base class should not be initialized directly");
|
|
@@ -91,7 +104,7 @@ static VALUE Coolio_Watcher_attach(VALUE self, VALUE loop)
|
|
|
91
104
|
VALUE loop_watchers, active_watchers;
|
|
92
105
|
struct Coolio_Watcher *watcher_data;
|
|
93
106
|
|
|
94
|
-
|
|
107
|
+
watcher_data = Coolio_Watcher_ptr(self);
|
|
95
108
|
watcher_data->enabled = 1;
|
|
96
109
|
|
|
97
110
|
loop_watchers = rb_iv_get(loop, "@watchers");
|
|
@@ -132,7 +145,7 @@ static VALUE Coolio_Watcher_detach(VALUE self)
|
|
|
132
145
|
VALUE loop_watchers;
|
|
133
146
|
int i;
|
|
134
147
|
|
|
135
|
-
|
|
148
|
+
watcher_data = Coolio_Watcher_ptr(self);
|
|
136
149
|
|
|
137
150
|
if(watcher_data->loop == Qnil)
|
|
138
151
|
rb_raise(rb_eRuntimeError, "not attached to a loop");
|
|
@@ -155,7 +168,7 @@ static VALUE Coolio_Watcher_detach(VALUE self)
|
|
|
155
168
|
|
|
156
169
|
watcher_data->enabled = 0;
|
|
157
170
|
|
|
158
|
-
|
|
171
|
+
loop_data = Coolio_Loop_ptr(watcher_data->loop);
|
|
159
172
|
|
|
160
173
|
/* Iterate through the events in the loop's event buffer. If there
|
|
161
174
|
* are any pending events from this watcher, mark them NULL. The
|
|
@@ -182,7 +195,7 @@ static VALUE Coolio_Watcher_detach(VALUE self)
|
|
|
182
195
|
static VALUE Coolio_Watcher_enable(VALUE self)
|
|
183
196
|
{
|
|
184
197
|
struct Coolio_Watcher *watcher_data;
|
|
185
|
-
|
|
198
|
+
watcher_data = Coolio_Watcher_ptr(self);
|
|
186
199
|
|
|
187
200
|
if(watcher_data->enabled)
|
|
188
201
|
rb_raise(rb_eRuntimeError, "already enabled");
|
|
@@ -208,7 +221,7 @@ static VALUE Coolio_Watcher_enable(VALUE self)
|
|
|
208
221
|
static VALUE Coolio_Watcher_disable(VALUE self)
|
|
209
222
|
{
|
|
210
223
|
struct Coolio_Watcher *watcher_data;
|
|
211
|
-
|
|
224
|
+
watcher_data = Coolio_Watcher_ptr(self);
|
|
212
225
|
|
|
213
226
|
if(!watcher_data->enabled)
|
|
214
227
|
rb_raise(rb_eRuntimeError, "already disabled");
|
|
@@ -234,7 +247,7 @@ static VALUE Coolio_Watcher_evloop(VALUE self)
|
|
|
234
247
|
{
|
|
235
248
|
struct Coolio_Watcher *watcher_data;
|
|
236
249
|
|
|
237
|
-
|
|
250
|
+
watcher_data = Coolio_Watcher_ptr(self);
|
|
238
251
|
return watcher_data->loop;
|
|
239
252
|
}
|
|
240
253
|
|
|
@@ -258,7 +271,7 @@ static VALUE Coolio_Watcher_attached(VALUE self)
|
|
|
258
271
|
static VALUE Coolio_Watcher_enabled(VALUE self)
|
|
259
272
|
{
|
|
260
273
|
struct Coolio_Watcher *watcher_data;
|
|
261
|
-
|
|
274
|
+
watcher_data = Coolio_Watcher_ptr(self);
|
|
262
275
|
|
|
263
276
|
return watcher_data->enabled ? Qtrue : Qfalse;
|
|
264
277
|
}
|
data/ext/cool.io/watcher.h
CHANGED
|
@@ -14,8 +14,8 @@
|
|
|
14
14
|
if(!rb_obj_is_kind_of(loop, cCoolio_Loop)) \
|
|
15
15
|
rb_raise(rb_eArgError, "expected loop to be an instance of Coolio::Loop, not %s", RSTRING_PTR(rb_inspect(loop))); \
|
|
16
16
|
\
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
watcher_data = Coolio_Watcher_ptr(watcher); \
|
|
18
|
+
loop_data = Coolio_Loop_ptr(loop); \
|
|
19
19
|
\
|
|
20
20
|
if(watcher_data->loop != Qnil) \
|
|
21
21
|
detach_func(watcher); \
|
|
@@ -28,12 +28,12 @@
|
|
|
28
28
|
struct Coolio_Watcher *watcher_data; \
|
|
29
29
|
struct Coolio_Loop *loop_data; \
|
|
30
30
|
\
|
|
31
|
-
|
|
31
|
+
watcher_data = Coolio_Watcher_ptr(watcher); \
|
|
32
32
|
\
|
|
33
33
|
if(watcher_data->loop == Qnil) \
|
|
34
34
|
rb_raise(rb_eRuntimeError, "not attached to a loop"); \
|
|
35
35
|
\
|
|
36
|
-
|
|
36
|
+
loop_data = Coolio_Loop_ptr(watcher_data->loop); \
|
|
37
37
|
\
|
|
38
38
|
ev_##watcher_type##_stop(loop_data->ev_loop, &watcher_data->event_types.ev_##watcher_type); \
|
|
39
39
|
rb_call_super(0, 0)
|
|
@@ -42,14 +42,14 @@
|
|
|
42
42
|
struct Coolio_Watcher *watcher_data; \
|
|
43
43
|
struct Coolio_Loop *loop_data; \
|
|
44
44
|
\
|
|
45
|
-
|
|
45
|
+
watcher_data = Coolio_Watcher_ptr(watcher); \
|
|
46
46
|
\
|
|
47
47
|
if(watcher_data->loop == Qnil) \
|
|
48
48
|
rb_raise(rb_eRuntimeError, "not attached to a loop"); \
|
|
49
49
|
\
|
|
50
50
|
rb_call_super(0, 0); \
|
|
51
51
|
\
|
|
52
|
-
|
|
52
|
+
loop_data = Coolio_Loop_ptr(watcher_data->loop); \
|
|
53
53
|
\
|
|
54
54
|
ev_##watcher_type##_start(loop_data->ev_loop, &watcher_data->event_types.ev_##watcher_type)
|
|
55
55
|
|
|
@@ -57,14 +57,14 @@
|
|
|
57
57
|
struct Coolio_Watcher *watcher_data; \
|
|
58
58
|
struct Coolio_Loop *loop_data; \
|
|
59
59
|
\
|
|
60
|
-
|
|
60
|
+
watcher_data = Coolio_Watcher_ptr(watcher); \
|
|
61
61
|
\
|
|
62
62
|
if(watcher_data->loop == Qnil) \
|
|
63
63
|
rb_raise(rb_eRuntimeError, "not attached to a loop"); \
|
|
64
64
|
\
|
|
65
65
|
rb_call_super(0, 0); \
|
|
66
66
|
\
|
|
67
|
-
|
|
67
|
+
loop_data = Coolio_Loop_ptr(watcher_data->loop); \
|
|
68
68
|
\
|
|
69
69
|
ev_##watcher_type##_stop(loop_data->ev_loop, &watcher_data->event_types.ev_##watcher_type)
|
|
70
70
|
|
data/lib/cool.io/dns_resolver.rb
CHANGED
|
@@ -72,7 +72,7 @@ module Coolio
|
|
|
72
72
|
raise RuntimeError, "no nameservers found" if nameservers.empty? # TODO just call resolve_failed, not raise [also handle Errno::ENOENT)]
|
|
73
73
|
end
|
|
74
74
|
|
|
75
|
-
@nameservers = nameservers
|
|
75
|
+
@nameservers = nameservers.dup
|
|
76
76
|
@question = request_question hostname
|
|
77
77
|
|
|
78
78
|
@socket = UDPSocket.new
|
data/lib/cool.io/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: cool.io
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.9.
|
|
4
|
+
version: 1.9.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Tony Arcieri
|
|
8
8
|
- Masahiro Nakagawa
|
|
9
|
-
autorequire:
|
|
10
9
|
bindir: bin
|
|
11
10
|
cert_chain: []
|
|
12
|
-
date:
|
|
11
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
13
12
|
dependencies:
|
|
14
13
|
- !ruby/object:Gem::Dependency
|
|
15
14
|
name: rake-compiler
|
|
@@ -155,7 +154,6 @@ homepage: https://github.com/socketry/cool.io
|
|
|
155
154
|
licenses:
|
|
156
155
|
- MIT
|
|
157
156
|
metadata: {}
|
|
158
|
-
post_install_message:
|
|
159
157
|
rdoc_options: []
|
|
160
158
|
require_paths:
|
|
161
159
|
- lib
|
|
@@ -170,8 +168,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
170
168
|
- !ruby/object:Gem::Version
|
|
171
169
|
version: '0'
|
|
172
170
|
requirements: []
|
|
173
|
-
rubygems_version:
|
|
174
|
-
signing_key:
|
|
171
|
+
rubygems_version: 4.0.0.dev
|
|
175
172
|
specification_version: 4
|
|
176
173
|
summary: A cool framework for doing high performance I/O in Ruby
|
|
177
174
|
test_files:
|