Files | Admin

Notes:

Release Name: 2.4.0

Notes:
kgio 2.4.0 - portability fixes and more

kgio provides non-blocking I/O methods for Ruby without raising
exceptions on EAGAIN and EINPROGRESS.  It is intended for use with the
Unicorn and Rainbows! Rack servers, but may be used by other
applications.

* http://bogomips.org/kgio/
* kgio@librelist.org
* git://bogomips.org/kgio.git

Changes:

== All supported platforms (*nix + MRI 1.8+, Rubinius)

* OpenBSD (and possibly other *BSD) fixes, thanks to Jeremy Evans.

* kgio_accept and kgio_tryaccept now take an optional second argument
  for flags (like the accept4() flags argument).

== Ruby 1.9-only things

* Kgio.poll no longer raises Errno::EINTR to match IO.select.

== Ruby 1.9 trunk things

* close() on an active FD in a different thread is better
  handled/detected.

* copy-on-write for strings is properly triggered



Changes: GIT-VERSION-GEN | 2 +- HACKING | 9 +- ext/kgio/accept.c | 229 ++++++++++++++++++++++++--------------- ext/kgio/autopush.c | 1 + ext/kgio/broken_system_compat.h | 62 +++++++++++ ext/kgio/connect.c | 1 + ext/kgio/extconf.rb | 8 +- ext/kgio/poll.c | 61 ++++++++++- ext/kgio/read_write.c | 14 ++- kgio.gemspec | 3 +- test/lib_read_write.rb | 36 ++++++ test/lib_server_accept.rb | 19 ++++ test/test_autopush.rb | 2 +- test/test_cross_thread_close.rb | 26 +++++ test/test_poll.rb | 47 ++++++-- test/test_tcp_connect.rb | 2 +- 16 files changed, 403 insertions(+), 119 deletions(-) commit ab732113e13f1690fd2c1a18d1c66beb7864d847 Author: Eric Wong Date: Thu May 5 15:58:17 2011 -0700 kgio 2.4.0 - portability fixes and more == All supported platforms (*nix + MRI 1.8+, Rubinius) * OpenBSD (and possibly other *BSD) fixes, thanks to Jeremy Evans. * kgio_accept and kgio_tryaccept now take an optional second argument for flags (like the accept4() flags argument). == Ruby 1.9-only things * Kgio.poll no longer raises Errno::EINTR to match IO.select. == Ruby 1.9 trunk things * close() on an active FD in a different thread is better handled/detected. * copy-on-write for strings is properly triggered commit 43190caf48309fa6aa5423d2d1ae5c320ad07fb5 Author: Eric Wong Date: Thu May 5 15:38:00 2011 -0700 test_cross_thread_close: disable on RUBY_ENGINE != "ruby" These aren't well-defined semantics... commit 9c98bbd79f152fd72b257f9c37ca185587e56225 Author: Eric Wong Date: Thu May 5 13:24:36 2011 -0700 read_write: call rb_str_modify() before rb_str_resize() This is needed under Ruby trunk if the string is not actually resized. commit c821ebeb851807840f74c4cb4f1a10e691bf222a Author: Eric Wong Date: Thu May 5 13:11:53 2011 -0700 poll: deal with pollset changes on EINTR This allows callers to modify the pollset, interrupt the polling thread, and then poll with the modified pollset. This is also important for dealing with closed IO objects that may have been invalidated due to GC, too. commit f589a9ae18216e1220bea8f905f33051e88f1ae7 Author: Eric Wong Date: Thu May 5 12:30:45 2011 -0700 test_tcp_connect: disable wait_writable_set test on non-Linux OpenBSD seems to make connect() return success immediately even on a non-blocking socket, so it's hard to test for. Thanks to Jeremy Evans to reporting the issue under OpenBSD. ref: http://mid.gmane.org/20110505181846.GB9693@jeremyevans.local commit 9900efecb60635ad97b5c00c76eb60252839b1c1 Author: Jeremy Evans Date: Thu May 5 11:18:46 2011 -0700 fix kgio_peek for !KGIO_NOPUSH systems Fix kgio_peek by adding an empty kgio_autopush_recv if !KGIO_NOPUSH. ref: http://mid.gmane.org/20110505181846.GB9693@jeremyevans.local Acked-by: Eric Wong commit 577cf3056d9f3088145aea51bbc09a0c90a7695e Author: Jeremy Evans Date: Thu May 5 11:49:01 2011 -0700 connect: zero out hints argument for getaddrinfo Some systems like OpenBSD are stricter about irrelevant fields than GNU/Linux. [ew: commit message] ref: http://mid.gmane.org/20110505181846.GB9693@jeremyevans.local Acked-by: Eric Wong commit 537e4c341137a45330e28376e8f29da7df44808f Author: Eric Wong Date: Wed May 4 19:26:38 2011 -0700 Kgio.poll restarts on interrupt This changes our semantics, but it's unlikely anybody relies on EINTR right now... commit f2a3998e0c0f63ad14acf5ccc0141fc6cdce24e3 Author: Eric Wong Date: Wed Apr 27 11:44:51 2011 -0700 extconf: remove unnecessary dir_config statement I didn't know this about mkmf at the time... commit 3033f2e8f178c0f150cfd3e2a070570154a27430 Author: Eric Wong Date: Thu Apr 21 20:08:01 2011 +0000 doc: improve kgio_accept/kgio_tryaccept docs Documenting the new flags options and also improving style of the existing class overrides. commit b885cf9a2ef0864dcebb9bba7b1fcf3eb08f9ae8 Author: Eric Wong Date: Thu Apr 21 20:06:08 2011 +0000 test_autopush: attempting to fix a timing test... Not fun on slow systems, unfortunately... commit be46333541acd72bde3544a3e86f6ead0bb364d0 Author: Eric Wong Date: Wed Apr 20 18:36:09 2011 -0700 doc: fix trywrite call-seq commit 3b48d6c823a7da34c0b37d8eb3c11964c4a3ba89 Author: Eric Wong Date: Thu Apr 14 02:31:50 2011 +0000 test_autopush: use assert_in_delta for test Some systems are slower than others... commit f36f7584b766cb5d558fcfa94ea639e6090bcb54 Author: Eric Wong Date: Mon Apr 11 18:21:09 2011 +0000 gemspec: bump wrongdoc version commit 212f6fdfe51e2167d362686bb2622ce04e6e5de5 Author: Eric Wong Date: Mon Apr 11 18:20:27 2011 +0000 gemspec: remove unnecessary require_paths RubyGems handles it already commit fefd652d6cc5825bebbe164a360c4a06b1399dcb Author: Eric Wong Date: Sun Apr 10 07:27:40 2011 +0000 add test for cross thread close Ruby 1.9.3dev has better support for it commit 983e8ff915118d00b683109df0834733b485086d Author: Eric Wong Date: Sun Apr 10 07:04:41 2011 +0000 read_write: detect closed fd on EINTR Another thread may have killed the descriptor. commit 01949865e2715b487e098dbc60ba3ae7a01a3b54 Author: Eric Wong Date: Sun Apr 10 06:07:55 2011 +0000 accept: better detect closed files on EINTR/EAGAIN Another thread may have killed the acceptor object. commit 59782a15d0be87130934cbecb34ed639be68b44a Author: Eric Wong Date: Sun Mar 20 16:27:55 2011 -0700 *accept methods can take flags argument, like accept4() This allows applications to not rely on global accept4_flags commit 0ef079617b7d71cc26574247918c4a3e18454b21 Author: Eric Wong Date: Sat Mar 19 18:29:15 2011 -0700 accept: prepare optional flags argument to accept() wrappers Don't force people to rely on global flags, there may be blocking parts of an otherwise non-blocking program... commit f8b8b3f73d238d4c29368b4a0f768c5afb03d43d Author: Eric Wong Date: Thu Mar 17 14:06:45 2011 -0700 HACKING: updates for wrongdoc vs rdoc