polyphony 0.47.0 → 0.47.5

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 606d74c424178b9e8bb17cd7b2848e0e1c1b092e77eeb98ce1026fd7d1f38c61
4
- data.tar.gz: 9e003833af5f2c8505ea41d2ebe728fbf776f428f47d925b0185fd592d102737
3
+ metadata.gz: 4343a37f26793e76528ea8e87287e2f3fbc4c8182064e820eedfc131d4308729
4
+ data.tar.gz: 89273660342f647e3e016290ef48ac10f33b040a3ca6538b1fdd29aab13519da
5
5
  SHA512:
6
- metadata.gz: 1cfb1c81d3b38a545ceb856d4619c11386407081ecd43a6e6209d2ed4efb1c436242aa016657d379f0a0331ca24944f5e51c5359ad44afc3a88d53af1de7976b
7
- data.tar.gz: 9b47ba16c7de942bea952f9f12d225aed86a505c2fd6cf7740a88d5d398af0e91e37a16e3ee9af2129ad88c8ff17c2b5aba7dcf6630811af62202e4b2585d6dc
6
+ metadata.gz: 7aa6b9f5e9ea61b682a112b30286b1e66f71088da67f96827d6415a6be12de4874de79ccd2236f36ba4da1bf5e9c078735bd07ac32520268c12cadfe60cd8565
7
+ data.tar.gz: e564dfed776907921bdceafcdb47e78fe5655d345812f3484d7493df74f3485d09bf32e756c766cc45efe45591524c6a24d55c19530fa14ededbb4f481e80977
@@ -1,484 +1,502 @@
1
+ ## 0.47.5
2
+
3
+ - Add `socket_class` argument to `Backend#accept`, `Backend#accept_loop`
4
+ - Fix `#supervise` to stop when all children fibers are done
5
+
6
+ ## 0.47.4
7
+
8
+ - Add support for Unix sockets
9
+
10
+ ## 0.47.3
11
+
12
+ - Enable I/O in signal handlers (#45)
13
+ - Accept `:interval` argument in `#spin_loop`
14
+
15
+ ## 0.47.2
16
+
17
+ - Fix API compatibility between TCPSocket and IO
18
+
1
19
  ## 0.47.0
2
20
 
3
- * Implement `#spin_scope` used for creating blocking fiber scopes
4
- * Reimplement `move_on_after`, `cancel_after`, `Timeout.timeout` using
21
+ - Implement `#spin_scope` used for creating blocking fiber scopes
22
+ - Reimplement `move_on_after`, `cancel_after`, `Timeout.timeout` using
5
23
  `Backend#timeout` (avoids creating canceller fiber for most common use case)
6
- * Implement `Backend#timeout` API
7
- * Implemented capped queues
24
+ - Implement `Backend#timeout` API
25
+ - Implemented capped queues
8
26
 
9
27
  ## 0.46.1
10
28
 
11
- * Add `TCPServer#accept_loop`, `OpenSSL::SSL::SSLSocket#accept_loop` method
12
- * Fix compilation error on MacOS (#43)
13
- * Fix backtrace for `Timeout.timeout`
14
- * Add `Backend#timer_loop`
29
+ - Add `TCPServer#accept_loop`, `OpenSSL::SSL::SSLSocket#accept_loop` method
30
+ - Fix compilation error on MacOS (#43)
31
+ - Fix backtrace for `Timeout.timeout`
32
+ - Add `Backend#timer_loop`
15
33
 
16
34
  ## 0.46.0
17
35
 
18
- * Implement [io_uring backend](https://github.com/digital-fabric/polyphony/pull/44)
36
+ - Implement [io_uring backend](https://github.com/digital-fabric/polyphony/pull/44)
19
37
 
20
38
  ## 0.45.5
21
39
 
22
- * Fix compilation error (#43)
23
- * Add support for resetting move_on_after, cancel_after timeouts
24
- * Optimize anti-event starvation polling
25
- * Implement optimized runqueue for better performance
26
- * Schedule parent with priority on uncaught exception
27
- * Fix race condition in `Mutex#synchronize` (#41)
40
+ - Fix compilation error (#43)
41
+ - Add support for resetting move_on_after, cancel_after timeouts
42
+ - Optimize anti-event starvation polling
43
+ - Implement optimized runqueue for better performance
44
+ - Schedule parent with priority on uncaught exception
45
+ - Fix race condition in `Mutex#synchronize` (#41)
28
46
 
29
47
  ## 0.45.4
30
48
 
31
- * Improve signal trapping mechanism
49
+ - Improve signal trapping mechanism
32
50
 
33
51
  ## 0.45.3
34
52
 
35
- * Don't swallow error in `Process#kill_and_await`
36
- * Add `Fiber#mailbox` attribute reader
37
- * Fix bug in `Fiber.await`
38
- * Implement `IO#getc`, `IO#getbyte`
53
+ - Don't swallow error in `Process#kill_and_await`
54
+ - Add `Fiber#mailbox` attribute reader
55
+ - Fix bug in `Fiber.await`
56
+ - Implement `IO#getc`, `IO#getbyte`
39
57
 
40
58
  ## 0.45.2
41
59
 
42
- * Rewrite `Fiber#<<`, `Fiber#await`, `Fiber#receive` in C
60
+ - Rewrite `Fiber#<<`, `Fiber#await`, `Fiber#receive` in C
43
61
 
44
62
  ## 0.45.1
45
63
 
46
- * Fix Net::HTTP compatibility
47
- * Fix fs adapter
48
- * Improve performance of IO#puts
49
- * Mutex#synchronize
50
- * Fix Socket#connect
51
- * Cleanup code
52
- * Improve support for Ruby 3 keyword args
64
+ - Fix Net::HTTP compatibility
65
+ - Fix fs adapter
66
+ - Improve performance of IO#puts
67
+ - Mutex#synchronize
68
+ - Fix Socket#connect
69
+ - Cleanup code
70
+ - Improve support for Ruby 3 keyword args
53
71
 
54
72
  ## 0.45.0
55
73
 
56
- * Cleanup code
57
- * Rename `Agent` to `Backend`
58
- * Implement `Polyphony::ConditionVariable`
59
- * Fix Kernel.system
74
+ - Cleanup code
75
+ - Rename `Agent` to `Backend`
76
+ - Implement `Polyphony::ConditionVariable`
77
+ - Fix Kernel.system
60
78
 
61
79
  ## 0.44.0 2020-07-25
62
80
 
63
- * Fix reentrant `ResourcePool` (#38)
64
- * Add `ResourcePool#discard!` (#35)
65
- * Add `Mysql2::Client` and `Sequel::ConnectionPool` adapters (#35)
66
- * Reimplement `Kernel.trap` using `Fiber#interject`
67
- * Add `Fiber#interject` for running arbitrary code on arbitrary fibers (#39)
81
+ - Fix reentrant `ResourcePool` (#38)
82
+ - Add `ResourcePool#discard!` (#35)
83
+ - Add `Mysql2::Client` and `Sequel::ConnectionPool` adapters (#35)
84
+ - Reimplement `Kernel.trap` using `Fiber#interject`
85
+ - Add `Fiber#interject` for running arbitrary code on arbitrary fibers (#39)
68
86
 
69
87
  ## 0.43.11 2020-07-24
70
88
 
71
- * Dump uncaught exception info for forked process (#36)
72
- * Add additional socket config options (#37)
89
+ - Dump uncaught exception info for forked process (#36)
90
+ - Add additional socket config options (#37)
73
91
  - :reuse_port (`SO_REUSEPORT`)
74
92
  - :backlog (listen backlog, default `SOMAXCONN`)
75
- * Fix possible race condition in Queue#shift (#34)
93
+ - Fix possible race condition in Queue#shift (#34)
76
94
 
77
95
  ## 0.43.10 2020-07-23
78
96
 
79
- * Fix race condition when terminating fibers (#33)
80
- * Fix lock release in `Mutex` (#32)
81
- * Virtualize agent interface
82
- * Implement `LibevAgent_connect`
97
+ - Fix race condition when terminating fibers (#33)
98
+ - Fix lock release in `Mutex` (#32)
99
+ - Virtualize agent interface
100
+ - Implement `LibevAgent_connect`
83
101
 
84
102
  ## 0.43.9 2020-07-22
85
103
 
86
- * Rewrite `Channel` using `Queue`
87
- * Rewrite `Mutex` using `Queue`
88
- * Reimplement `Event` in C to prevent cross-thread race condition
89
- * Reimplement `ResourcePool` using `Queue`
90
- * Implement `Queue#size`
104
+ - Rewrite `Channel` using `Queue`
105
+ - Rewrite `Mutex` using `Queue`
106
+ - Reimplement `Event` in C to prevent cross-thread race condition
107
+ - Reimplement `ResourcePool` using `Queue`
108
+ - Implement `Queue#size`
91
109
 
92
110
  ## 0.43.8 2020-07-21
93
111
 
94
- * Rename `LibevQueue` to `Queue`
95
- * Reimplement Event using `Agent#wait_event`
96
- * Improve Queue shift queue performance
97
- * Introduce `Agent#wait_event` API for waiting on asynchronous events
98
- * Minimize `fcntl` syscalls in IO operations
112
+ - Rename `LibevQueue` to `Queue`
113
+ - Reimplement Event using `Agent#wait_event`
114
+ - Improve Queue shift queue performance
115
+ - Introduce `Agent#wait_event` API for waiting on asynchronous events
116
+ - Minimize `fcntl` syscalls in IO operations
99
117
 
100
118
  ## 0.43.7 2020-07-20
101
119
 
102
- * Fix memory leak in ResourcePool (#31)
103
- * Check and adjust file position before reading (#30)
104
- * Minor documentation fixes
120
+ - Fix memory leak in ResourcePool (#31)
121
+ - Check and adjust file position before reading (#30)
122
+ - Minor documentation fixes
105
123
 
106
124
  ## 0.43.6 2020-07-18
107
125
 
108
- * Allow brute-force interrupting with second Ctrl-C
109
- * Fix outgoing SSL connections (#28)
110
- * Improve Fiber#await_all_children with many children
111
- * Use `writev` for writing multiple strings
112
- * Add logo (thanks [Gerald](https://webocube.com/)!)
126
+ - Allow brute-force interrupting with second Ctrl-C
127
+ - Fix outgoing SSL connections (#28)
128
+ - Improve Fiber#await_all_children with many children
129
+ - Use `writev` for writing multiple strings
130
+ - Add logo (thanks [Gerald](https://webocube.com/)!)
113
131
 
114
132
  ## 0.43.5 2020-07-13
115
133
 
116
- * Fix `#read_nonblock`, `#write_nonblock` for `IO` and `Socket` (#27)
117
- * Patch `Kernel#p`, `IO#puts` to issue single write call
118
- * Add support for multiple arguments in `IO#write` and `LibevAgent#write`
119
- * Use LibevQueue for fiber run queue
120
- * Reimplement LibevQueue as ring buffer
134
+ - Fix `#read_nonblock`, `#write_nonblock` for `IO` and `Socket` (#27)
135
+ - Patch `Kernel#p`, `IO#puts` to issue single write call
136
+ - Add support for multiple arguments in `IO#write` and `LibevAgent#write`
137
+ - Use LibevQueue for fiber run queue
138
+ - Reimplement LibevQueue as ring buffer
121
139
 
122
140
  ## 0.43.4 2020-07-09
123
141
 
124
- * Reimplement Kernel#trap
125
- * Dynamically allocate read buffer if length not given (#23)
126
- * Prevent CPU saturation on infinite sleep (#24)
142
+ - Reimplement Kernel#trap
143
+ - Dynamically allocate read buffer if length not given (#23)
144
+ - Prevent CPU saturation on infinite sleep (#24)
127
145
 
128
146
  ## 0.43.3 2020-07-08
129
147
 
130
- * Fix behaviour after call to `Process.daemon` (#8)
131
- * Replace core `Queue` class with `Polyphony::Queue` (#22)
132
- * Make `ResourcePool` reentrant (#1)
133
- * Accept `:with_exception` argument in `cancel_after` (#16)
148
+ - Fix behaviour after call to `Process.daemon` (#8)
149
+ - Replace core `Queue` class with `Polyphony::Queue` (#22)
150
+ - Make `ResourcePool` reentrant (#1)
151
+ - Accept `:with_exception` argument in `cancel_after` (#16)
134
152
 
135
153
  ## 0.43.2 2020-07-07
136
154
 
137
- * Fix sending Redis commands with array arguments (#21)
155
+ - Fix sending Redis commands with array arguments (#21)
138
156
 
139
157
  ## 0.43.1 2020-06
140
158
 
141
- * Fix compiling C-extension on MacOS (#20)
159
+ - Fix compiling C-extension on MacOS (#20)
142
160
 
143
161
  ## 0.43 2020-07-05
144
162
 
145
- * Add IO#read_loop
146
- * Fix OpenSSL extension
147
- * More work on docs
163
+ - Add IO#read_loop
164
+ - Fix OpenSSL extension
165
+ - More work on docs
148
166
 
149
167
  ## 0.42 2020-07-03
150
168
 
151
- * Improve documentation
152
- * Fix backtrace on SIGINT
153
- * Implement LibevAgent#accept_loop, #read_loop
154
- * Move ref counting from thread to agent
155
- * Short circuit switchpoint if continuing with the same fiber
156
- * Always do a switchpoint in #read, #write, #accept
169
+ - Improve documentation
170
+ - Fix backtrace on SIGINT
171
+ - Implement LibevAgent#accept_loop, #read_loop
172
+ - Move ref counting from thread to agent
173
+ - Short circuit switchpoint if continuing with the same fiber
174
+ - Always do a switchpoint in #read, #write, #accept
157
175
 
158
176
  ## 0.41 2020-06-27
159
177
 
160
- * Introduce System Agent design, remove all `Gyro` classes
178
+ - Introduce System Agent design, remove all `Gyro` classes
161
179
 
162
180
  ## 0.40 2020-05-04
163
181
 
164
- * More improvements to stability after fork
182
+ - More improvements to stability after fork
165
183
 
166
184
  ## 0.38 2020-04-13
167
185
 
168
- * Fix post-fork segfault if parent process has multiple threads with active watchers
186
+ - Fix post-fork segfault if parent process has multiple threads with active watchers
169
187
 
170
188
  ## 0.37 2020-04-07
171
189
 
172
- * Explicitly kill threads on exit to prevent possible segfault
173
- * Remove Modulation dependency
190
+ - Explicitly kill threads on exit to prevent possible segfault
191
+ - Remove Modulation dependency
174
192
 
175
193
  ## 0.36 2020-03-31
176
194
 
177
- * More docs
178
- * More C code refactoring
179
- * Fix freeing for active child, signal watchers
195
+ - More docs
196
+ - More C code refactoring
197
+ - Fix freeing for active child, signal watchers
180
198
 
181
199
  ## 0.35 2020-03-29
182
200
 
183
- * Rename `Fiber#cancel!` to `Fiber#cancel`
184
- * Rename `Gyro::Async#signal!` to `Gyro::Async#signal`
185
- * Use `Fiber#auto_watcher` in thread pool, thread extension
186
- * Implement `Fiber#auto_io` for reusing IO watcher instances
187
- * Refactor C code
201
+ - Rename `Fiber#cancel!` to `Fiber#cancel`
202
+ - Rename `Gyro::Async#signal!` to `Gyro::Async#signal`
203
+ - Use `Fiber#auto_watcher` in thread pool, thread extension
204
+ - Implement `Fiber#auto_io` for reusing IO watcher instances
205
+ - Refactor C code
188
206
 
189
207
  ## 0.34 2020-03-25
190
208
 
191
- * Add `Fiber#auto_watcher` mainly for use in places like `Gyro::Queue#shift`
192
- * Refactor C extension
193
- * Improved GC'ing for watchers
194
- * Implement process supervisor (`Polyphony::ProcessSupervisor`)
195
- * Improve fiber supervision
196
- * Fix forking behaviour
197
- * Use correct backtrace for fiber control exceptions
198
- * Allow calling `move_on_after` and `cancel_after` without block
209
+ - Add `Fiber#auto_watcher` mainly for use in places like `Gyro::Queue#shift`
210
+ - Refactor C extension
211
+ - Improved GC'ing for watchers
212
+ - Implement process supervisor (`Polyphony::ProcessSupervisor`)
213
+ - Improve fiber supervision
214
+ - Fix forking behaviour
215
+ - Use correct backtrace for fiber control exceptions
216
+ - Allow calling `move_on_after` and `cancel_after` without block
199
217
 
200
218
  ## 0.33 2020-03-08
201
219
 
202
- * Implement `Fiber#supervise` (WIP)
203
- * Add `Fiber#restart` API
204
- * Fix race condition in `Thread#join`, `Thread#raise` (#14)
205
- * Add `Exception#source_fiber` - references the fiber in which an uncaught
220
+ - Implement `Fiber#supervise` (WIP)
221
+ - Add `Fiber#restart` API
222
+ - Fix race condition in `Thread#join`, `Thread#raise` (#14)
223
+ - Add `Exception#source_fiber` - references the fiber in which an uncaught
206
224
  exception occurred
207
225
 
208
226
  ## 0.32 2020-02-29
209
227
 
210
- * Accept optional throttling rate in `#spin_loop`
211
- * Remove CancelScope
212
- * Allow spinning fibers from a parent fiber other than the current
213
- * Add `#receive_pending` global API.
214
- * Prevent race condition in `Gyro::Queue`.
215
- * Improve signal handling - `INT`, `TERM` signals are now always handled in the
228
+ - Accept optional throttling rate in `#spin_loop`
229
+ - Remove CancelScope
230
+ - Allow spinning fibers from a parent fiber other than the current
231
+ - Add `#receive_pending` global API.
232
+ - Prevent race condition in `Gyro::Queue`.
233
+ - Improve signal handling - `INT`, `TERM` signals are now always handled in the
216
234
  main fiber
217
- * Fix adapter requires (redis and postgres)
235
+ - Fix adapter requires (redis and postgres)
218
236
 
219
237
  ## 0.31 2020-02-20
220
238
 
221
- * Fix signal handling race condition (#13)
222
- * Move adapter code into polyphony/adapters
223
- * Fix spin_loop caller, add tag parameter
239
+ - Fix signal handling race condition (#13)
240
+ - Move adapter code into polyphony/adapters
241
+ - Fix spin_loop caller, add tag parameter
224
242
 
225
243
  ## 0.30 2020-02-04
226
244
 
227
- * Add support for awaiting a fiber from multiple monitor fibers at once
228
- * Implemented child fibers
229
- * Fix TERM and INT signal handling (#11)
230
- * Fix compiling on Linux
231
- * Do not reset runnable value in Gyro_suspend (prevents interrupting timers)
232
- * Don't snooze when stopping a fiber
233
- * Fix IO#read for files larger than 8KB (#10)
234
- * Fix fiber messaging in main fiber
235
- * Prevent signalling of inactive async watcher
236
- * Better fiber messaging
245
+ - Add support for awaiting a fiber from multiple monitor fibers at once
246
+ - Implemented child fibers
247
+ - Fix TERM and INT signal handling (#11)
248
+ - Fix compiling on Linux
249
+ - Do not reset runnable value in Gyro_suspend (prevents interrupting timers)
250
+ - Don't snooze when stopping a fiber
251
+ - Fix IO#read for files larger than 8KB (#10)
252
+ - Fix fiber messaging in main fiber
253
+ - Prevent signalling of inactive async watcher
254
+ - Better fiber messaging
237
255
 
238
256
  ## 0.29 2020-02-02
239
257
 
240
- * Pass SignalException to main fiber
241
- * Add (restore) default thread pool
242
- * Prevent race condition in Thread#join
243
- * Add support for cross-thread fiber scheduling
244
- * Remove `#defer` global method
245
- * Prevent starvation of waiting fibers when using snooze (#7)
246
- * Improve tracing
247
- * Fix IRB adapter
258
+ - Pass SignalException to main fiber
259
+ - Add (restore) default thread pool
260
+ - Prevent race condition in Thread#join
261
+ - Add support for cross-thread fiber scheduling
262
+ - Remove `#defer` global method
263
+ - Prevent starvation of waiting fibers when using snooze (#7)
264
+ - Improve tracing
265
+ - Fix IRB adapter
248
266
 
249
267
  ## 0.28 2020-01-27
250
268
 
251
- * Accept block in Supervisor#initialize
252
- * Refactor `ThreadPool`
253
- * Implement fiber switch events for `TracePoint`
254
- * Add optional tag parameter to #spin
255
- * Correctly increment ref count for indefinite sleep
256
- * Add `irb` adapter
257
- * Add support for listen/notify to postgres adapter
258
- * Use `:waiting`, `:runnable`, `:running`, `:dead` for fiber states
259
- * Move docs to https://digital-fabric.github.io/polyphony/
269
+ - Accept block in Supervisor#initialize
270
+ - Refactor `ThreadPool`
271
+ - Implement fiber switch events for `TracePoint`
272
+ - Add optional tag parameter to #spin
273
+ - Correctly increment ref count for indefinite sleep
274
+ - Add `irb` adapter
275
+ - Add support for listen/notify to postgres adapter
276
+ - Use `:waiting`, `:runnable`, `:running`, `:dead` for fiber states
277
+ - Move docs to https://digital-fabric.github.io/polyphony/
260
278
 
261
279
  ## 0.27 2020-01-19
262
280
 
263
- * Reimplement `Throttler` using recurring timer
264
- * Add `Gyro::Selector` for wrapping libev
265
- * Add `Gyro::Queue`, a fiber-aware thread-safe queue
266
- * Implement multithreaded fiber scheduling
281
+ - Reimplement `Throttler` using recurring timer
282
+ - Add `Gyro::Selector` for wrapping libev
283
+ - Add `Gyro::Queue`, a fiber-aware thread-safe queue
284
+ - Implement multithreaded fiber scheduling
267
285
 
268
286
  ## 0.26 2020-01-12
269
287
 
270
- * Optimize `IO#read_watcher`, `IO#write_watcher`
271
- * Implement `Fiber#raise`
272
- * Fix `Kernel#gets` with `ARGV`
273
- * Return `[pid, exit_status]` from `Gyro::Child#await`
288
+ - Optimize `IO#read_watcher`, `IO#write_watcher`
289
+ - Implement `Fiber#raise`
290
+ - Fix `Kernel#gets` with `ARGV`
291
+ - Return `[pid, exit_status]` from `Gyro::Child#await`
274
292
 
275
293
  ## 0.25 2020-01-10
276
294
 
277
- * Fold `Coprocess` functionality into `Fiber`
278
- * Add support for indefinite `#sleep`
295
+ - Fold `Coprocess` functionality into `Fiber`
296
+ - Add support for indefinite `#sleep`
279
297
 
280
298
  ## 0.24 2020-01-08
281
299
 
282
- * Extract HTTP code into separate polyphony-http gem
283
- * Cull core, io examples
284
- * Remove `SIGINT` handler
300
+ - Extract HTTP code into separate polyphony-http gem
301
+ - Cull core, io examples
302
+ - Remove `SIGINT` handler
285
303
 
286
304
  ## 0.23 2020-01-07
287
305
 
288
- * Remove `API#pulse`
289
- * Better repeat timer, reimplement `API#every`
290
- * Move global API methods to separate module, include in `Object` instead of
306
+ - Remove `API#pulse`
307
+ - Better repeat timer, reimplement `API#every`
308
+ - Move global API methods to separate module, include in `Object` instead of
291
309
  `Kernel`
292
- * Improve setting root fiber and corresponding coprocess
293
- * Fix `ResourcePool#preheat!`
294
- * Rename `$Coprocess#list` to `Coprocess#map`
295
- * Fix `CancelScope#on_cancel`, remove `CancelScope#protect`
296
- * Remove `auto_run` mechanism. Just use `suspend`!
297
- * Optional coverage report for tests
298
- * More tests
299
- * Add `Coprocess.select` and `Supervisor#select` methods
300
- * Add `Coprocess.join` alias to `Coprocess.await` method
301
- * Add support for cancelling multiple coprocesses with a single cancel scope
302
- * Fix stopping a coprocess before it being scheduled for the first time
303
- * Rewrite `thread`, `thread_pool` modules
304
- * Add `Kernel#orig_sleep` alias to sync `#sleep` method
305
- * Add optional resume value to `Gyro::Async#signal!`
306
- * Patch Fiber#inspect to show correct block location
307
- * Add Gyro.run
308
- * Move away from callback-based API for `Gyro::Timer`, `Gyro::Signal`
310
+ - Improve setting root fiber and corresponding coprocess
311
+ - Fix `ResourcePool#preheat!`
312
+ - Rename `$Coprocess#list` to `Coprocess#map`
313
+ - Fix `CancelScope#on_cancel`, remove `CancelScope#protect`
314
+ - Remove `auto_run` mechanism. Just use `suspend`!
315
+ - Optional coverage report for tests
316
+ - More tests
317
+ - Add `Coprocess.select` and `Supervisor#select` methods
318
+ - Add `Coprocess.join` alias to `Coprocess.await` method
319
+ - Add support for cancelling multiple coprocesses with a single cancel scope
320
+ - Fix stopping a coprocess before it being scheduled for the first time
321
+ - Rewrite `thread`, `thread_pool` modules
322
+ - Add `Kernel#orig_sleep` alias to sync `#sleep` method
323
+ - Add optional resume value to `Gyro::Async#signal!`
324
+ - Patch Fiber#inspect to show correct block location
325
+ - Add Gyro.run
326
+ - Move away from callback-based API for `Gyro::Timer`, `Gyro::Signal`
309
327
 
310
328
  ## 0.22 2020-01-02
311
329
 
312
- * Redesign Gyro scheduling subsystem, go scheduler-less
313
- * More docs
314
- * Rewrite HTTP client agent c1b63787
315
- * Increment Gyro refcount in ResourcePool#acquire
316
- * Rewrite ResourcePool
317
- * Fix socket extensions
318
- * Fix ALPN setup in Net.secure_socket
330
+ - Redesign Gyro scheduling subsystem, go scheduler-less
331
+ - More docs
332
+ - Rewrite HTTP client agent c1b63787
333
+ - Increment Gyro refcount in ResourcePool#acquire
334
+ - Rewrite ResourcePool
335
+ - Fix socket extensions
336
+ - Fix ALPN setup in Net.secure_socket
319
337
 
320
338
  ## 0.21 2019-12-12
321
339
 
322
- * Add Coprocess.await (for waiting for multiple coprocesses)
323
- * Add Coprocess#caller, Coprocess#location methods
324
- * Remove callback-oriented Gyro APIs
325
- * Revise signal handling API
326
- * Improve error handling in HTTP/2 adapter
327
- * More documentation
340
+ - Add Coprocess.await (for waiting for multiple coprocesses)
341
+ - Add Coprocess#caller, Coprocess#location methods
342
+ - Remove callback-oriented Gyro APIs
343
+ - Revise signal handling API
344
+ - Improve error handling in HTTP/2 adapter
345
+ - More documentation
328
346
 
329
347
  ## 0.20 2019-11-27
330
348
 
331
- * Refactor and improve CancelScope, ResourcePool
332
- * Reimplement cancel_after, move_on_after using plain timers
333
- * Use Timer#await instead of Timer#start in Pulser
334
- * Rename Fiber.main to Fiber.root
335
- * Replace use of defer with proper fiber scheduling
336
- * Improve Coprocess resume, interrupt, cancel methods
337
- * Cleanup code using Rubocop
338
- * Update and cleanup examples
339
- * Remove fiber pool
340
- * Rename `CoprocessInterrupt` to `Interrupt`
341
- * Fix ResourcePool, Mutex, Thread, ThreadPool
342
- * Fix coprocess message passing behaviour
343
- * Add HTTP::Request#consume API
344
- * Use bundler 2.x
345
- * Remove separate parse loop fiber in HTTP 1, HTTP 2 adapters
346
- * Fix handling of exceptions in coprocesses
347
- * Implement synthetic, sanitized exception backtrace showing control flow across
349
+ - Refactor and improve CancelScope, ResourcePool
350
+ - Reimplement cancel_after, move_on_after using plain timers
351
+ - Use Timer#await instead of Timer#start in Pulser
352
+ - Rename Fiber.main to Fiber.root
353
+ - Replace use of defer with proper fiber scheduling
354
+ - Improve Coprocess resume, interrupt, cancel methods
355
+ - Cleanup code using Rubocop
356
+ - Update and cleanup examples
357
+ - Remove fiber pool
358
+ - Rename `CoprocessInterrupt` to `Interrupt`
359
+ - Fix ResourcePool, Mutex, Thread, ThreadPool
360
+ - Fix coprocess message passing behaviour
361
+ - Add HTTP::Request#consume API
362
+ - Use bundler 2.x
363
+ - Remove separate parse loop fiber in HTTP 1, HTTP 2 adapters
364
+ - Fix handling of exceptions in coprocesses
365
+ - Implement synthetic, sanitized exception backtrace showing control flow across
348
366
  fibers
349
- * Fix channels
350
- * Fix HTTP1 connection shutdown and error states
351
- * Workaround for IO#read without length
352
- * Rename `next_tick` to `defer`
353
- * Fix race condition in firing of deferred items, use linked list instead of
367
+ - Fix channels
368
+ - Fix HTTP1 connection shutdown and error states
369
+ - Workaround for IO#read without length
370
+ - Rename `next_tick` to `defer`
371
+ - Fix race condition in firing of deferred items, use linked list instead of
354
372
  array for deferred items
355
- * Rename `EV` module to `Gyro`
356
- * Keep track of main fiber when forking
357
- * Add `<<` alias for `send_chunk` in HTTP::Request
358
- * Implement Socket#accept in C
359
- * Better conformance of rack adapter to rack spec (WIP)
360
- * Fix HTTP1 adapter
361
- * Better support for debugging with ruby-debug-ide (WIP)
373
+ - Rename `EV` module to `Gyro`
374
+ - Keep track of main fiber when forking
375
+ - Add `<<` alias for `send_chunk` in HTTP::Request
376
+ - Implement Socket#accept in C
377
+ - Better conformance of rack adapter to rack spec (WIP)
378
+ - Fix HTTP1 adapter
379
+ - Better support for debugging with ruby-debug-ide (WIP)
362
380
 
363
381
  ## 0.19 2019-06-12
364
382
 
365
- * Rewrite HTTP server for better concurrency, sequential API
366
- * Support 204 no-content response in HTTP 1
367
- * Add optional count parameter to Kernel#throttled_loop for finite looping
368
- * Implement Fiber#safe_transfer in C
369
- * Optimize Kernel#next_tick implementation using ev_idle instead of ev_timer
383
+ - Rewrite HTTP server for better concurrency, sequential API
384
+ - Support 204 no-content response in HTTP 1
385
+ - Add optional count parameter to Kernel#throttled_loop for finite looping
386
+ - Implement Fiber#safe_transfer in C
387
+ - Optimize Kernel#next_tick implementation using ev_idle instead of ev_timer
370
388
 
371
389
  ## 0.18 2019-06-08
372
390
 
373
- * Rename Kernel#coproc to Kernel#spin
374
- * Rewrite Supervisor#spin
391
+ - Rename Kernel#coproc to Kernel#spin
392
+ - Rewrite Supervisor#spin
375
393
 
376
394
  ## 0.17 2019-05-24
377
395
 
378
- * Implement IO#read_watcher, IO#write_watcher in C for better performance
379
- * Implement nonblocking (yielding) versions of Kernel#system, IO.popen,
396
+ - Implement IO#read_watcher, IO#write_watcher in C for better performance
397
+ - Implement nonblocking (yielding) versions of Kernel#system, IO.popen,
380
398
  Process.detach, IO#gets IO#puts, other IO singleton methods
381
- * Add Coprocess#join as alias to Coprocess#await
382
- * Rename Kernel#spawn to Kernel#coproc
383
- * Fix encoding of strings read with IO#read, IO#readpartial
384
- * Fix non-blocking behaviour of IO#read, IO#readpartial, IO#write
399
+ - Add Coprocess#join as alias to Coprocess#await
400
+ - Rename Kernel#spawn to Kernel#coproc
401
+ - Fix encoding of strings read with IO#read, IO#readpartial
402
+ - Fix non-blocking behaviour of IO#read, IO#readpartial, IO#write
385
403
 
386
404
  ## 0.16 2019-05-22
387
405
 
388
- * Reorganize and refactor code
389
- * Allow opening secure socket without OpenSSL context
406
+ - Reorganize and refactor code
407
+ - Allow opening secure socket without OpenSSL context
390
408
 
391
409
  ## 0.15 2019-05-20
392
410
 
393
- * Optimize `#next_tick` callback (about 6% faster than before)
394
- * Fix IO#<< to return self
395
- * Refactor HTTP code and examples
396
- * Fix race condition in `Supervisor#stop!`
397
- * Add `Kernel#snooze` method (`EV.snooze` will be deprecated eventually)
411
+ - Optimize `#next_tick` callback (about 6% faster than before)
412
+ - Fix IO#<< to return self
413
+ - Refactor HTTP code and examples
414
+ - Fix race condition in `Supervisor#stop!`
415
+ - Add `Kernel#snooze` method (`EV.snooze` will be deprecated eventually)
398
416
 
399
417
  ## 0.14 2019-05-17
400
418
 
401
- * Use chunked encoding in HTTP 1 response
402
- * Rewrite `IO#read`, `#readpartial`, `#write` in C (about 30% performance improvement)
403
- * Add method delegation to `ResourcePool`
404
- * Optimize PG::Connection#async_exec
405
- * Fix `Coprocess#cancel!`
406
- * Preliminary support for websocket (see `examples/io/http_ws_server.rb`)
407
- * Rename `Coroutine` to `Coprocess`
419
+ - Use chunked encoding in HTTP 1 response
420
+ - Rewrite `IO#read`, `#readpartial`, `#write` in C (about 30% performance improvement)
421
+ - Add method delegation to `ResourcePool`
422
+ - Optimize PG::Connection#async_exec
423
+ - Fix `Coprocess#cancel!`
424
+ - Preliminary support for websocket (see `examples/io/http_ws_server.rb`)
425
+ - Rename `Coroutine` to `Coprocess`
408
426
 
409
427
  ## 0.13 2019-01-05
410
428
 
411
- * Rename Rubato to Polyphony (I know, this is getting silly...)
429
+ - Rename Rubato to Polyphony (I know, this is getting silly...)
412
430
 
413
431
  ## 0.12 2019-01-01
414
432
 
415
- * Add Coroutine#resume
416
- * Improve startup time
417
- * Accept rate: or interval: arguments for throttle
418
- * Set correct backtrace for errors
419
- * Improve handling of uncaught raised errors
420
- * Implement HTTP 1.1/2 client agent with connection management
433
+ - Add Coroutine#resume
434
+ - Improve startup time
435
+ - Accept rate: or interval: arguments for throttle
436
+ - Set correct backtrace for errors
437
+ - Improve handling of uncaught raised errors
438
+ - Implement HTTP 1.1/2 client agent with connection management
421
439
 
422
440
  ## 0.11 2018-12-27
423
441
 
424
- * Move reactor loop to secondary fiber, allow blocking operations on main
442
+ - Move reactor loop to secondary fiber, allow blocking operations on main
425
443
  fiber.
426
- * Example implementation of erlang-style generic server pattern (implement async
444
+ - Example implementation of erlang-style generic server pattern (implement async
427
445
  API to a coroutine)
428
- * Implement coroutine mailboxes, Coroutine#<<, Coroutine#receive, Kernel.receive
446
+ - Implement coroutine mailboxes, Coroutine#<<, Coroutine#receive, Kernel.receive
429
447
  for message passing
430
- * Add Coroutine.current for getting current coroutine
448
+ - Add Coroutine.current for getting current coroutine
431
449
 
432
450
  ## 0.10 2018-11-20
433
451
 
434
- * Rewrite Rubato core for simpler code and better performance
435
- * Implement EV.snooze (sleep until next tick)
436
- * Coroutine encapsulates a task spawned on a separate fiber
437
- * Supervisor supervises multiple coroutines
438
- * CancelScope used to cancel an ongoing task (usually with a timeout)
439
- * Rate throttling
440
- * Implement async SSL server
452
+ - Rewrite Rubato core for simpler code and better performance
453
+ - Implement EV.snooze (sleep until next tick)
454
+ - Coroutine encapsulates a task spawned on a separate fiber
455
+ - Supervisor supervises multiple coroutines
456
+ - CancelScope used to cancel an ongoing task (usually with a timeout)
457
+ - Rate throttling
458
+ - Implement async SSL server
441
459
 
442
460
  ## 0.9 2018-11-14
443
461
 
444
- * Rename Nuclear to Rubato
462
+ - Rename Nuclear to Rubato
445
463
 
446
464
  ## 0.8 2018-10-04
447
465
 
448
- * Replace nio4r with in-house extension based on libev, with better API,
466
+ - Replace nio4r with in-house extension based on libev, with better API,
449
467
  better performance, support for IO, timer, signal and async watchers
450
- * Fix mem leak coming from nio4r (probably related to code in Selector#select)
468
+ - Fix mem leak coming from nio4r (probably related to code in Selector#select)
451
469
 
452
470
  ## 0.7 2018-09-13
453
471
 
454
- * Implement resource pool
455
- * transaction method for pg cient
456
- * Async connect for pg client
457
- * Add testing module for testing async code
458
- * Improve HTTP server performance
459
- * Proper promise chaining
472
+ - Implement resource pool
473
+ - transaction method for pg cient
474
+ - Async connect for pg client
475
+ - Add testing module for testing async code
476
+ - Improve HTTP server performance
477
+ - Proper promise chaining
460
478
 
461
479
  ## 0.6 2018-09-11
462
480
 
463
- * Add http, redis, pg dependencies
464
- * Move ALPN code inside net module
481
+ - Add http, redis, pg dependencies
482
+ - Move ALPN code inside net module
465
483
 
466
484
  ## 0.4 2018-09-10
467
485
 
468
- * Code refactored and reogranized
469
- * Fix recursion in next_tick
470
- * HTTP 2 server with support for ALPN protocol negotiation and HTTP upgrade
471
- * OpenSSL server
486
+ - Code refactored and reogranized
487
+ - Fix recursion in next_tick
488
+ - HTTP 2 server with support for ALPN protocol negotiation and HTTP upgrade
489
+ - OpenSSL server
472
490
 
473
491
  ## 0.3 2018-09-06
474
492
 
475
- * Event reactor
476
- * Timers
477
- * Promises
478
- * async/await syntax for promises
479
- * IO and read/write stream
480
- * TCP server/client
481
- * Promised threads
482
- * HTTP server
483
- * Redis interface
484
- * PostgreSQL interface
493
+ - Event reactor
494
+ - Timers
495
+ - Promises
496
+ - async/await syntax for promises
497
+ - IO and read/write stream
498
+ - TCP server/client
499
+ - Promised threads
500
+ - HTTP server
501
+ - Redis interface
502
+ - PostgreSQL interface