polyphony 0.99.4 → 0.99.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +10 -0
  3. data/examples/pipes/gzip_http_server.rb +2 -2
  4. data/examples/pipes/http_server.rb +1 -1
  5. data/examples/pipes/tcp_proxy.rb +1 -1
  6. data/ext/polyphony/backend_common.c +4 -4
  7. data/ext/polyphony/backend_io_uring.c +8 -8
  8. data/ext/polyphony/backend_libev.c +5 -5
  9. data/ext/polyphony/fiber.c +32 -41
  10. data/ext/polyphony/io_extensions.c +50 -37
  11. data/ext/polyphony/pipe.c +6 -18
  12. data/ext/polyphony/polyphony.c +63 -133
  13. data/ext/polyphony/queue.c +25 -63
  14. data/ext/polyphony/thread.c +3 -12
  15. data/lib/polyphony/adapters/process.rb +1 -2
  16. data/lib/polyphony/adapters/sequel.rb +2 -2
  17. data/lib/polyphony/core/debug.rb +1 -1
  18. data/lib/polyphony/core/exceptions.rb +1 -1
  19. data/lib/polyphony/core/global_api.rb +24 -38
  20. data/lib/polyphony/core/resource_pool.rb +7 -8
  21. data/lib/polyphony/core/sync.rb +1 -2
  22. data/lib/polyphony/core/thread_pool.rb +2 -5
  23. data/lib/polyphony/core/throttler.rb +1 -5
  24. data/lib/polyphony/core/timer.rb +24 -25
  25. data/lib/polyphony/extensions/fiber.rb +507 -540
  26. data/lib/polyphony/extensions/io.rb +3 -12
  27. data/lib/polyphony/extensions/openssl.rb +2 -23
  28. data/lib/polyphony/extensions/pipe.rb +4 -15
  29. data/lib/polyphony/extensions/socket.rb +15 -109
  30. data/lib/polyphony/extensions/thread.rb +0 -13
  31. data/lib/polyphony/extensions/timeout.rb +0 -1
  32. data/lib/polyphony/net.rb +5 -8
  33. data/lib/polyphony/version.rb +1 -1
  34. data/lib/polyphony.rb +2 -6
  35. data/test/test_io.rb +221 -221
  36. data/test/test_socket.rb +3 -3
  37. data/test/test_trace.rb +2 -2
  38. metadata +1 -1
@@ -27,15 +27,11 @@ ID ID_R;
27
27
  ID ID_W;
28
28
  ID ID_RW;
29
29
 
30
- /* call-seq:
31
- * snooze
32
- * Polyphony.snooze
33
- *
34
- * Switches to the next fiber in the current thread's runqueue after adding the
30
+ /* Switches to the next fiber in the current thread's runqueue after adding the
35
31
  * current fiber to the runqueue. This lets other fibers run, letting the
36
32
  * current fiber eventually continue its work. This call is useful when
37
33
  * performing long-running calculations in order to keep the program responsive.
38
- *
34
+ *
39
35
  * @return [void]
40
36
  */
41
37
 
@@ -43,14 +39,10 @@ VALUE Polyphony_snooze(VALUE self) {
43
39
  return Backend_snooze(BACKEND());
44
40
  }
45
41
 
46
- /* call-seq:
47
- * suspend
48
- * Polyphony.suspend
49
- *
50
- * Switches to the next fiber in the current thread's runqueue without
42
+ /* Switches to the next fiber in the current thread's runqueue without
51
43
  * rescheduling the current fiber. This is useful if the current fiber does not
52
44
  * need to continue or will be scheduled by other means eventually.
53
- *
45
+ *
54
46
  * @return [void]
55
47
  */
56
48
 
@@ -62,15 +54,12 @@ static VALUE Polyphony_suspend(VALUE self) {
62
54
  return ret;
63
55
  }
64
56
 
65
- /* call-seq:
66
- * Polyphony.backend_accept(server_socket, socket_class) -> socket
67
- *
68
- * Accepts an incoming connection on the given server socket, returning an
57
+ /* Accepts an incoming connection on the given server socket, returning an
69
58
  * instance of the given socket class.
70
- *
59
+ *
71
60
  * @param server_socket [Socket] socket to accept on
72
61
  * @param socket_class [Class] class of the socket to instantiate for the accepted connection
73
- *
62
+ *
74
63
  * @return [Socket] accepted connection
75
64
  */
76
65
 
@@ -78,15 +67,12 @@ VALUE Polyphony_backend_accept(VALUE self, VALUE server_socket, VALUE socket_cla
78
67
  return Backend_accept(BACKEND(), server_socket, socket_class);
79
68
  }
80
69
 
81
- /* call-seq:
82
- * Polyphony.backend_accept_loop(server_socket, socket_class) { |socket| ... }
83
- *
84
- * Runs an infinite loop accepting connections on the given server socket,
70
+ /* Runs an infinite loop accepting connections on the given server socket,
85
71
  * returning an instance of the given socket class.
86
- *
72
+ *
87
73
  * @param server_socket [Socket] socket to accept on
88
74
  * @param socket_class [Class] class of the socket to instantiate for the accepted connection
89
- * @yield [Socket] accepted connection passed to the given block
75
+ * @yield [Socket] accepted connection
90
76
  * @return [void]
91
77
  */
92
78
 
@@ -95,12 +81,9 @@ VALUE Polyphony_backend_accept_loop(VALUE self, VALUE server_socket, VALUE socke
95
81
  }
96
82
 
97
83
  #ifdef HAVE_IO_URING_PREP_MULTISHOT_ACCEPT
98
- /* call-seq:
99
- * Polyphony.backend_multishot_accept(server_socket) { ... }
100
- *
101
- * Starts a multishot accept operation on the given server socket. This API is
84
+ /* Starts a multishot accept operation on the given server socket. This API is
102
85
  * available only for the io_uring backend.
103
- *
86
+ *
104
87
  * @param server_socket [Socket] socket to accept on
105
88
  * @return [void]
106
89
  */
@@ -111,15 +94,12 @@ VALUE Polyphony_backend_multishot_accept(VALUE self, VALUE server_socket) {
111
94
  #endif
112
95
 
113
96
 
114
- /* call-seq:
115
- * Polyphony.backend_connect(socket, addr, port) -> socket
97
+ /* Connects the given socket to the given address and port.
116
98
  *
117
- * Connects the given socket to the given address and port.
118
- *
119
99
  * @param io [Socket] socket to connect
120
100
  * @param addr [String] address to connect to
121
101
  * @param port [Integer] port to connect to
122
- *
102
+ *
123
103
  * @return [Socket] accepted connection
124
104
  */
125
105
 
@@ -127,36 +107,29 @@ VALUE Polyphony_backend_connect(VALUE self, VALUE io, VALUE addr, VALUE port) {
127
107
  return Backend_connect(BACKEND(), io, addr, port);
128
108
  }
129
109
 
130
- /* call-seq:
131
- * Polyphony.backend_feed_loop(io, receiver, method)
110
+ /* Runs a feed loop, reading data from the given io, feeding it to the receiver
111
+ * with the given method. The loop terminates when EOF is encountered. If a
112
+ * block is given, it is used as the block for the method call to the receiver.
132
113
  *
133
- * Runs a feed loop, reading data from the given io, feeding it to the receiver
134
- * with the given method, and passing the receiver's output to the given block.
135
- * The loop terminates when EOF is encountered.
136
- *
137
114
  * @param io [IO] io to read from
138
115
  * @param receiver [any] an object receiving the data
139
116
  * @param method [Symbol] method used to feed the data to the receiver
140
- * @yield [any] data passed to the given block
141
- *
142
- * @return [void]
117
+ *
118
+ * @return [IO] io
143
119
  */
144
120
 
145
121
  VALUE Polyphony_backend_feed_loop(VALUE self, VALUE io, VALUE receiver, VALUE method) {
146
122
  return Backend_feed_loop(BACKEND(), io, receiver, method);
147
123
  }
148
124
 
149
- /* call-seq:
150
- * Polyphony.backend_read(io, buffer, length, to_eof, pos) -> buffer
125
+ /* Reads from the given io.
151
126
  *
152
- * Reads from the given io.
153
- *
154
127
  * @param io [IO] io to read from
155
128
  * @param buffer [String, nil] buffer to read into
156
129
  * @param length [Integer] maximum bytes to read
157
130
  * @param to_eof [boolean] whether to read to EOF
158
131
  * @param pos [Integer] Position in the buffer to read into
159
- *
132
+ *
160
133
  * @return [String] buffer
161
134
  */
162
135
 
@@ -164,15 +137,12 @@ VALUE Polyphony_backend_read(VALUE self, VALUE io, VALUE buffer, VALUE length, V
164
137
  return Backend_read(BACKEND(), io, buffer, length, to_eof, pos);
165
138
  }
166
139
 
167
- /* call-seq:
168
- * Polyphony.backend_read_loop(io, max_len)
169
- *
170
- * Performs an infinite loop reading data from the given io. The loop terminates
140
+ /* Performs an infinite loop reading data from the given io. The loop terminates
171
141
  * when EOF is encountered.
172
- *
142
+ *
173
143
  * @param io [IO] io to read from
174
144
  * @param maxlen [Integer] maximum bytes to read
175
- *
145
+ *
176
146
  * @return [void]
177
147
  */
178
148
 
@@ -180,16 +150,13 @@ VALUE Polyphony_backend_read_loop(VALUE self, VALUE io, VALUE maxlen) {
180
150
  return Backend_read_loop(BACKEND(), io, maxlen);
181
151
  }
182
152
 
183
- /* call-seq:
184
- * Polyphony.backend_recv(io, buffer, length, pos) -> buffer
153
+ /* Receives data on the given io.
185
154
  *
186
- * Receives data on the given io.
187
- *
188
155
  * @param io [Socket] io to receive on
189
156
  * @param buffer [String, nil] buffer to read into
190
157
  * @param length [Integer] maximum bytes to read
191
158
  * @param pos [Integer] Position in the buffer to read into
192
- *
159
+ *
193
160
  * @return [String] buffer
194
161
  */
195
162
 
@@ -197,11 +164,8 @@ VALUE Polyphony_backend_recv(VALUE self, VALUE io, VALUE buffer, VALUE length, V
197
164
  return Backend_recv(BACKEND(), io, buffer, length, pos);
198
165
  }
199
166
 
200
- /* call-seq:
201
- * Polyphony.backend_recvmsg(socket, buffer, maxlen, pos, flags, maxcontrollen, opts) -> buffer
167
+ /* Receives a message on the given socket.
202
168
  *
203
- * Receives a message on the given socket.
204
- *
205
169
  * @param socket [UDPSocket] io to receive on
206
170
  * @param buffer [String, nil] buffer to read into
207
171
  * @param maxlen [Integer] maximum bytes to read
@@ -209,7 +173,6 @@ VALUE Polyphony_backend_recv(VALUE self, VALUE io, VALUE buffer, VALUE length, V
209
173
  * @param flags [Integer] Flags
210
174
  * @param maxcontrollen [Integer] Maximum control bytes
211
175
  * @param opts [Hash] Options
212
- *
213
176
  * @return [String] buffer
214
177
  */
215
178
 
@@ -217,15 +180,12 @@ VALUE Polyphony_backend_recvmsg(VALUE self, VALUE socket, VALUE buffer, VALUE ma
217
180
  return Backend_recvmsg(BACKEND(), socket, buffer, maxlen, pos, flags, maxcontrollen, opts);
218
181
  }
219
182
 
220
- /* call-seq:
221
- * Polyphony.backend_recv_loop(socket, max_len)
183
+ /* Performs an infinite loop receiving data on the given socket. The loop
184
+ * terminates when the socket is closed.
222
185
  *
223
- * Performs an infinite loop receiving data on the given socket. The loop terminates
224
- * when the socket is closed.
225
- *
226
186
  * @param socket [Socket] socket to receive on
227
187
  * @param maxlen [Integer] maximum bytes to read
228
- *
188
+ * @yield [data] received data
229
189
  * @return [void]
230
190
  */
231
191
 
@@ -233,18 +193,15 @@ VALUE Polyphony_backend_recv_loop(VALUE self, VALUE socket, VALUE maxlen) {
233
193
  return Backend_recv_loop(BACKEND(), socket, maxlen);
234
194
  }
235
195
 
236
- /* call-seq:
237
- * Polyphony.backend_recv_feed_loop(socket, receiver, method)
196
+ /* Runs a feed loop, receiving data on the given socket, feeding it to the
197
+ * receiver with the given method. The loop terminates when EOF is encountered.
198
+ * If a block is given, it is used as the block for the method call to the
199
+ * receiver.
238
200
  *
239
- * Runs a feed loop, receiving data on the given socket, feeding it to the receiver
240
- * with the given method, and passing the receiver's output to the given block.
241
- * The loop terminates when EOF is encountered.
242
- *
243
201
  * @param socket [Socket] socket to receive on
244
202
  * @param receiver [any] an object receiving the data
245
203
  * @param method [Symbol] method used to feed the data to the receiver
246
- * @yield [any] data passed to the given block
247
- *
204
+ *
248
205
  * @return [void]
249
206
  */
250
207
 
@@ -252,15 +209,12 @@ VALUE Polyphony_backend_recv_feed_loop(VALUE self, VALUE socket, VALUE receiver,
252
209
  return Backend_recv_feed_loop(BACKEND(), socket, receiver, method);
253
210
  }
254
211
 
255
- /* call-seq:
256
- * Polyphony.backend_send(socket, msg, flags) -> bytes_sent
212
+ /* Sends data on the given socket, returning the number of bytes sent.
257
213
  *
258
- * Sends data on the given socket, returning the number of bytes sent.
259
- *
260
214
  * @param socket [Socket] socket to read from
261
215
  * @param msg [String] data to be sent
262
216
  * @param flags [Integer] Flags
263
- *
217
+ *
264
218
  * @return [Integer] number of bytes sent
265
219
  */
266
220
 
@@ -268,11 +222,8 @@ VALUE Polyphony_backend_send(VALUE self, VALUE socket, VALUE msg, VALUE flags) {
268
222
  return Backend_send(BACKEND(), socket, msg, flags);
269
223
  }
270
224
 
271
- /* call-seq:
272
- * Polyphony.backend_sendmsg(socket, msg, flags, dest_sockaddr, controls) -> bytes_sent
225
+ /* Sends data on the given socket, returning the number of bytes sent.
273
226
  *
274
- * Sends data on the given socket, returning the number of bytes sent.
275
- *
276
227
  * @param socket [Socket] socket to read from
277
228
  * @param msg [String] data to be sent
278
229
  * @param flags [Integer] Flags
@@ -285,11 +236,9 @@ VALUE Polyphony_backend_sendmsg(VALUE self, VALUE socket, VALUE msg, VALUE flags
285
236
  return Backend_sendmsg(BACKEND(), socket, msg, flags, dest_sockaddr, controls);
286
237
  }
287
238
 
288
- /* call-seq:
289
- * Polyphony.backend_sendv(socket, ary, flags) -> bytes_sent
239
+ /* Sends multiple strings on the given socket, returning the number of bytes
240
+ * sent.
290
241
  *
291
- * Sends multiple strings on the given socket, returning the number of bytes sent.
292
- *
293
242
  * @param socket [Socket] socket to read from
294
243
  * @param ary [Array<String>] data to be sent
295
244
  * @param flags [Integer] Flags
@@ -300,11 +249,8 @@ VALUE Polyphony_backend_sendv(VALUE self, VALUE socket, VALUE ary, VALUE flags)
300
249
  return Backend_sendv(BACKEND(), socket, ary, flags);
301
250
  }
302
251
 
303
- /* call-seq:
304
- * Polyphony.backend_sleep(duration)
252
+ /* Sleeps for the given duration, yielding execution to other fibers.
305
253
  *
306
- * Sleeps for the given duration, yielding execution to other fibers.
307
- *
308
254
  * @param duration [Number] duration in seconds
309
255
  * @return [void]
310
256
  */
@@ -313,12 +259,9 @@ VALUE Polyphony_backend_sleep(VALUE self, VALUE duration) {
313
259
  return Backend_sleep(BACKEND(), duration);
314
260
  }
315
261
 
316
- /* call-seq:
317
- * Polyphony.backend_splice(src, dest, maxlen) -> bytes_spliced
318
- *
319
- * Splices data from the given source to the given destination, returning the
262
+ /* Splices data from the given source to the given destination, returning the
320
263
  * number of bytes spliced.
321
- *
264
+ *
322
265
  * @param src [IO] source
323
266
  * @param dest [IO] destination
324
267
  * @param maxlen [Integer] Maximum bytes to splice
@@ -345,27 +288,26 @@ VALUE Polyphony_backend_tee(VALUE self, VALUE src, VALUE dest, VALUE chunksize)
345
288
  }
346
289
  #endif
347
290
 
348
- /* call-seq:
349
- * Polyphony.backend_timeout(duration) { ... }
350
- * Polyphony.backend_timeout(duration, exception_class) { ... }
351
- *
352
- * Runs the given block, raising an exception if the block has not finished
291
+ /* Runs the given block, raising an exception if the block has not finished
353
292
  * running before a timeout has elapsed, using the given duration. If an
354
293
  * exception class is not given, a TimeoutError is raised.
355
- *
294
+ *
295
+ * @overload backend_timeout(duration)
296
+ * @param duration [Number] timeout duration in seconds
297
+ * @return [any] return value of block
298
+ * @overload backend_timeout(duration, exception_class)
299
+ * @param duration [Number] timeout duration in seconds
300
+ * @param exception_class [Class] exception class to raise in case of timeout
301
+ * @return [any] return value of block
356
302
  */
357
303
 
358
304
  VALUE Polyphony_backend_timeout(int argc,VALUE *argv, VALUE self) {
359
305
  return Backend_timeout(argc, argv, BACKEND());
360
306
  }
361
307
 
362
- /* call-seq:
363
- * Polyphony.backend_timer_loop(interval) { ... }
308
+ /* Runs an infinite loop that calls the given block at the specified time interval.
364
309
  *
365
- * Runs an infinite loop that calls the given block at the specified time interval.
366
- *
367
310
  * @param interval [Number] interval in seconds
368
- * @yield [] code to run
369
311
  * @return [void]
370
312
  */
371
313
 
@@ -373,13 +315,10 @@ VALUE Polyphony_backend_timer_loop(VALUE self, VALUE interval) {
373
315
  return Backend_timer_loop(BACKEND(), interval);
374
316
  }
375
317
 
376
- /* call-seq:
377
- * Polyphony.backend_wait_event(raise)
378
- *
379
- * For for the current fiber to be rescheduled, resuming the fiber with its
318
+ /* For for the current fiber to be rescheduled, resuming the fiber with its
380
319
  * resumed value. If raise is true and the resumed value is an exception, an
381
320
  * exception will be raised.
382
- *
321
+ *
383
322
  * @param raise [boolean]
384
323
  * @return [any] resumed value
385
324
  */
@@ -388,12 +327,9 @@ VALUE Polyphony_backend_wait_event(VALUE self, VALUE raise) {
388
327
  return Backend_wait_event(BACKEND(), raise);
389
328
  }
390
329
 
391
- /* call-seq:
392
- * Polyphony.backend_wait_io(io, read_or_write)
393
- *
394
- * Waits for the given IO to be readable or writeable, according to the
330
+ /* Waits for the given IO to be readable or writeable, according to the
395
331
  * read_or_write parameter.
396
- *
332
+ *
397
333
  * @param io [IO]
398
334
  * @param write [boolean] false for read, true for write
399
335
  * @return [void]
@@ -403,11 +339,8 @@ VALUE Polyphony_backend_wait_io(VALUE self, VALUE io, VALUE write) {
403
339
  return Backend_wait_io(BACKEND(), io, write);
404
340
  }
405
341
 
406
- /* call-seq:
407
- * Polyphony.backend_wait_pid(pid) -> exit code
342
+ /* Waits for the given process to terminate, returning its exit code.
408
343
  *
409
- * Waits for the given process to terminate, returning its exit code.
410
- *
411
344
  * @param pid [Integer] pid
412
345
  * @return [Integer] exit code
413
346
  */
@@ -416,10 +349,7 @@ VALUE Polyphony_backend_waitpid(VALUE self, VALUE pid) {
416
349
  return Backend_waitpid(BACKEND(), pid);
417
350
  }
418
351
 
419
- /* call-seq:
420
- * Polyphony.backend_write(io, data, ...) -> bytes_written
421
- *
422
- * Writes one or more strings to the given io, returning the total number of
352
+ /* Writes one or more strings to the given io, returning the total number of
423
353
  * bytes written.
424
354
  */
425
355
 
@@ -450,7 +380,7 @@ VALUE Polyphony_raw_buffer_get(int argc, VALUE *argv, VALUE self) {
450
380
 
451
381
  struct buffer_spec *buffer_spec = FIX2PTR(buf);
452
382
  int length = (len == Qnil) ? buffer_spec->len : FIX2INT(len);
453
-
383
+
454
384
  if (length > buffer_spec->len) length = buffer_spec->len;
455
385
  return rb_utf8_str_new((char *)buffer_spec->ptr, length);
456
386
  }
@@ -462,7 +392,7 @@ VALUE Polyphony_raw_buffer_set(VALUE self, VALUE buffer, VALUE str) {
462
392
  int len = RSTRING_LEN(str);
463
393
  if (len > buffer_spec->len)
464
394
  rb_raise(rb_eRuntimeError, "Given string does not fit in given buffer");
465
-
395
+
466
396
  memcpy(buffer_spec->ptr, RSTRING_PTR(str), len);
467
397
  buffer_spec->len = len;
468
398
  return self;
@@ -504,7 +434,7 @@ void Init_Polyphony(void) {
504
434
  rb_define_singleton_method(mPolyphony, "backend_sendv", Polyphony_backend_sendv, 3);
505
435
  rb_define_singleton_method(mPolyphony, "backend_sleep", Polyphony_backend_sleep, 1);
506
436
  rb_define_singleton_method(mPolyphony, "backend_splice", Polyphony_backend_splice, 3);
507
-
437
+
508
438
  #ifdef POLYPHONY_BACKEND_LIBURING
509
439
  rb_define_singleton_method(mPolyphony, "backend_double_splice", Polyphony_backend_double_splice, 2);
510
440
  #endif
@@ -512,7 +442,7 @@ void Init_Polyphony(void) {
512
442
  #ifdef POLYPHONY_LINUX
513
443
  rb_define_singleton_method(mPolyphony, "backend_tee", Polyphony_backend_tee, 3);
514
444
  #endif
515
-
445
+
516
446
  rb_define_singleton_method(mPolyphony, "backend_timeout", Polyphony_backend_timeout, -1);
517
447
  rb_define_singleton_method(mPolyphony, "backend_timer_loop", Polyphony_backend_timer_loop, 1);
518
448
  rb_define_singleton_method(mPolyphony, "backend_wait_event", Polyphony_backend_wait_event, 1);
@@ -61,16 +61,16 @@ static VALUE Queue_allocate(VALUE klass) {
61
61
  #define GetQueue(obj, queue) \
62
62
  TypedData_Get_Struct((obj), Queue_t, &Queue_type, (queue))
63
63
 
64
- /* call-seq:
65
- * Queue.new -> queue
66
- * Queue.new(capacity) -> queue
67
- *
68
- * Initializes a queue instance. If the capacity is given, the queue becomes
64
+ /* Initializes a queue instance. If the capacity is given, the queue becomes
69
65
  * capped, i.e. it cannot contain more elements than its capacity. When trying
70
66
  * to add items to a capped queue that is full, the current fiber will block
71
67
  * until at least one item is removed from the queue.
72
- *
73
- * @return [void]
68
+ *
69
+ * @overload new()
70
+ * @return [void]
71
+ * @overload new(capacity)
72
+ * @param capacity [Integer] maximum items in queue
73
+ * @return [void]
74
74
  */
75
75
 
76
76
  static VALUE Queue_initialize(int argc, VALUE *argv, VALUE self) {
@@ -131,7 +131,7 @@ static inline void capped_queue_block_push(Queue_t *queue) {
131
131
  *
132
132
  * Adds the given value to the queue's end. If the queue is capped and full, the
133
133
  * call will block until a value is removed from the queue.
134
- *
134
+ *
135
135
  * @param value [any] value to be added to the queue
136
136
  * @return [Queue] self
137
137
  */
@@ -151,12 +151,9 @@ VALUE Queue_push(VALUE self, VALUE value) {
151
151
  return self;
152
152
  }
153
153
 
154
- /* call-seq:
155
- * queue.unshift(value) -> queue
156
- *
157
- * Adds the given value to the queue's beginning. If the queue is capped and
154
+ /* Adds the given value to the queue's beginning. If the queue is capped and
158
155
  * full, the call will block until a value is removed from the queue.
159
- *
156
+ *
160
157
  * @param value [any] value to be added to the queue
161
158
  * @return [Queue] self
162
159
  */
@@ -230,6 +227,7 @@ VALUE Queue_shift_block(Queue_t *queue) {
230
227
  * the queue is empty, a ThreadError exception is raised. In blocking mode, if
231
228
  * the queue is empty, the call will block until an item is added to the queue.
232
229
  *
230
+ * @param nonblock [boolean] non-blocking mode
233
231
  * @return [any] first value in queue
234
232
  */
235
233
 
@@ -243,10 +241,7 @@ VALUE Queue_shift(int argc,VALUE *argv, VALUE self) {
243
241
  Queue_shift_block(queue);
244
242
  }
245
243
 
246
- /* call-seq:
247
- * queue.delete(value) -> queue
248
- *
249
- * Removes the given value from the queue.
244
+ /* Removes the given value from the queue.
250
245
  *
251
246
  * @return [Queue] self
252
247
  */
@@ -263,10 +258,7 @@ VALUE Queue_delete(VALUE self, VALUE value) {
263
258
  return self;
264
259
  }
265
260
 
266
- /* call-seq:
267
- * queue.cap(capacity) -> queue
268
- *
269
- * Sets the capacity for the queue to the given value. If 0 or nil is given, the
261
+ /* Sets the capacity for the queue to the given value. If 0 or nil is given, the
270
262
  * queue becomes uncapped.
271
263
  *
272
264
  * @param cap [Integer, nil] new capacity
@@ -287,10 +279,7 @@ VALUE Queue_cap(VALUE self, VALUE cap) {
287
279
  return self;
288
280
  }
289
281
 
290
- /* call-seq:
291
- * queue.capped? -> bool
292
- *
293
- * Returns true if the queue is capped.
282
+ /* Returns true if the queue is capped.
294
283
  *
295
284
  * @return [boolean] is the queue capped
296
285
  */
@@ -302,10 +291,7 @@ VALUE Queue_capped_p(VALUE self) {
302
291
  return queue->capacity ? INT2FIX(queue->capacity) : Qnil;
303
292
  }
304
293
 
305
- /* call-seq:
306
- * queue.clear -> queue
307
- *
308
- * Removes all values from the queue.
294
+ /* Removes all values from the queue.
309
295
  *
310
296
  * @return [Queue] self
311
297
  */
@@ -327,13 +313,10 @@ long Queue_len(VALUE self) {
327
313
  return queue->values.count;
328
314
  }
329
315
 
330
- /* call-seq:
331
- * queue.shift_each { |value| do_something(value) } -> queue
332
- *
333
- * Iterates over all values in the queue, removing each item and passing it to
316
+ /* Iterates over all values in the queue, removing each item and passing it to
334
317
  * the given block.
335
318
  *
336
- * @yield [any] value passed to the given block
319
+ * @yield [any] removed item
337
320
  * @return [Queue] self
338
321
  */
339
322
 
@@ -346,10 +329,7 @@ VALUE Queue_shift_each(VALUE self) {
346
329
  return self;
347
330
  }
348
331
 
349
- /* call-seq:
350
- * queue.shift_all -> array
351
- *
352
- * Returns all values currently in the queue, clearing the queue.
332
+ /* Returns all values currently in the queue, clearing the queue.
353
333
  *
354
334
  * @return [Array] all values
355
335
  */
@@ -365,10 +345,7 @@ VALUE Queue_shift_all(VALUE self) {
365
345
  return result;
366
346
  }
367
347
 
368
- /* call-seq:
369
- * queue.flush_waiters -> queue
370
- *
371
- * Flushes all fibers currently blocked waiting to remove items from the queue,
348
+ /* Flushes all fibers currently blocked waiting to remove items from the queue,
372
349
  * resuming them with the given value.
373
350
  *
374
351
  * @param value [any] value to resome all waiting fibers with
@@ -389,10 +366,7 @@ VALUE Queue_flush_waiters(VALUE self, VALUE value) {
389
366
  return self;
390
367
  }
391
368
 
392
- /* call-seq:
393
- * queue.empty? -> bool
394
- *
395
- * Returns true if the queue is empty.
369
+ /* Returns true if the queue is empty.
396
370
  *
397
371
  * @return [boolean]
398
372
  */
@@ -404,10 +378,7 @@ VALUE Queue_empty_p(VALUE self) {
404
378
  return (!queue->values.count) ? Qtrue : Qfalse;
405
379
  }
406
380
 
407
- /* call-seq:
408
- * queue.pending? -> bool
409
- *
410
- * Returns true if any fibers are currently waiting to remove items from the
381
+ /* Returns true if any fibers are currently waiting to remove items from the
411
382
  * queue.
412
383
  *
413
384
  * @return [boolean]
@@ -420,10 +391,7 @@ VALUE Queue_pending_p(VALUE self) {
420
391
  return (queue->shift_queue.count) ? Qtrue : Qfalse;
421
392
  }
422
393
 
423
- /* call-seq:
424
- * queue.num_waiting -> integer
425
- *
426
- * Returns the number of fibers currently waiting to remove items from the
394
+ /* Returns the number of fibers currently waiting to remove items from the
427
395
  * queue.
428
396
  *
429
397
  * @return [Integer]
@@ -438,7 +406,7 @@ VALUE Queue_num_waiting(VALUE self) {
438
406
 
439
407
  /* call-seq:
440
408
  * queue.size -> integer
441
- * queue.length -> integer
409
+ * queue.length -> integer
442
410
  *
443
411
  * Returns the number of values currently in the queue.
444
412
  *
@@ -452,10 +420,7 @@ VALUE Queue_size_m(VALUE self) {
452
420
  return INT2FIX(queue->values.count);
453
421
  }
454
422
 
455
- /* call-seq:
456
- * queue.closed? -> bool
457
- *
458
- * Returns true if the queue has been closed.
423
+ /* Returns true if the queue has been closed.
459
424
  *
460
425
  * @return [boolean]
461
426
  */
@@ -467,10 +432,7 @@ VALUE Queue_closed_p(VALUE self) {
467
432
  return (queue->closed) ? Qtrue : Qfalse;
468
433
  }
469
434
 
470
- /* call-seq:
471
- * queue.close -> queue
472
- *
473
- * Marks the queue as closed. Any fibers currently waiting on the queue are
435
+ /* Marks the queue as closed. Any fibers currently waiting on the queue are
474
436
  * resumed with a `nil` value. After the queue is closed, trying to remove items
475
437
  * from the queue will cause a `ClosedQueueError` to be raised.
476
438
  *
@@ -19,11 +19,8 @@ inline void schedule_fiber(VALUE self, VALUE fiber, VALUE value, int prioritize)
19
19
  Backend_schedule_fiber(self, rb_ivar_get(self, ID_ivar_backend), fiber, value, prioritize);
20
20
  }
21
21
 
22
- /* call-seq:
23
- * thread.unschedule_fiber(fiber)
22
+ /* Removes the given fiber from the thread's runqueue.
24
23
  *
25
- * Removes the given fiber from the thread's runqueue.
26
- *
27
24
  * @param fiber [Fiber] fiber to unschedule
28
25
  * @return [Thread] self
29
26
  */
@@ -45,11 +42,8 @@ inline void Thread_schedule_fiber_with_priority(VALUE self, VALUE fiber, VALUE v
45
42
  // schedule_fiber(self, fiber, value, 1);
46
43
  }
47
44
 
48
- /* call-seq:
49
- * thread.switch_fiber()
45
+ /* Switches to the next fiber in the thread's runqueue.
50
46
  *
51
- * Switches to the next fiber in the thread's runqueue.
52
- *
53
47
  * @return [void]
54
48
  */
55
49
 
@@ -80,11 +74,8 @@ VALUE Thread_debug(VALUE self) {
80
74
  return self;
81
75
  }
82
76
 
83
- /* call-seq:
84
- * Thread.backend
77
+ /* Returns the backend for the current thread.
85
78
  *
86
- * Returns the backend for the current thread.
87
- *
88
79
  * @return [Polyphony::Backend] backend for the current thread
89
80
  */
90
81