Files | Admin

Notes:

Release Name: 3.1.0

Notes:
sleepy_penguin 3.1.0 - minor fixes and features

sleepy_penguin provides access to newer, Linux-only system calls to wait
on events from traditionally non-I/O sources.  Bindings to the eventfd,
timerfd, inotify, and epoll interfaces are provided.

* http://bogomips.org/sleepy_penguin/
* sleepy.penguin@librelist.org
* git://bogomips.org/sleepy_penguin.git
* http://bogomips.org/sleepy_penguin/NEWS.atom.xml

Changes:

* add TimerFD::CANCEL_ON_SET constant
  ref: http://www.man7.org/tlpi/api_changes/
* fix concurrent Epoll#wait on the same epoll fd
* SignalFD interface removed (unworkable with Ruby runtimes)
* use rb_update_max_fd() if available (Ruby 1.9.3)
* reintroduce SLEEPY_PENGUIN_VERSION constant ("3.1.0")



Changes: GIT-VERSION-GEN | 2 +- README | 4 +- ext/sleepy_penguin/epoll.c | 237 ++++++++++--------------- ext/sleepy_penguin/epoll_green.h | 95 ++++++++++ ext/sleepy_penguin/extconf.rb | 8 +- ext/sleepy_penguin/inotify.c | 1 - ext/sleepy_penguin/missing_rb_update_max_fd.h | 3 + ext/sleepy_penguin/signalfd.c | 6 +- ext/sleepy_penguin/sleepy_penguin.h | 1 + ext/sleepy_penguin/timerfd.c | 6 + lib/sleepy_penguin.rb | 6 + sleepy_penguin.gemspec | 2 +- test/test_epoll.rb | 102 ++++++++++- 13 files changed, 323 insertions(+), 150 deletions(-) commit db1eb67855149050e448c63df12ade22135916cd Author: Eric Wong Date: Wed May 2 08:56:22 2012 +0000 sleepy_penguin 3.1.0 - minor fixes and features * add TimerFD::CANCEL_ON_SET constant ref: http://www.man7.org/tlpi/api_changes/ * fix concurrent Epoll#wait on the same epoll fd * SignalFD interface removed (unworkable with Ruby runtimes) * use rb_update_max_fd() if available (Ruby 1.9.3) * reintroduce SLEEPY_PENGUIN_VERSION constant ("3.1.0") commit 455bd1f97e978d337764e2c917353889c3fa4d9c Author: Eric Wong Date: Wed May 2 08:52:03 2012 +0000 reintroduce SLEEPY_PENGUIN_VERSION constant We unfortunately need it since we switched to the per-thread epoll_wait structures. commit 1264e45ee8776e68df08e76a75d08fa745266e22 Author: Eric Wong Date: Wed May 2 08:24:52 2012 +0000 timerfd: remove unusable constants (never released) timerfd currently (Linux 3.3.x) only supports CLOCK_REALTIME and CLOCK_MONOTONIC, and not every single clock supported by POSIX clocks. commit e2a9b831ec9ab2c8fad622deec1aef8853f4cb41 Author: Eric Wong Date: Sun Apr 22 08:13:46 2012 +0000 epoll: update comment on free(NULL) usage It's POSIX, and since epoll is Linux-only and Linux uses glibc which is pretty up-to-date w.r.t POSIX, we don't have to worry... commit b6982e360e00adc2a15c6d75dc6a5cde56cd9e7f Author: Eric Wong Date: Sat Dec 10 20:50:41 2011 +0000 teset: epoll used as a queue This is a testcase I wrote a few months ago commit 6fa0bc3f4c6fd959463a3906a820a724076a416c Author: Eric Wong Date: Thu Mar 22 08:29:13 2012 +0000 epoll: use per-thread data structure for concurrent Epoll#wait This allows multiple threads to park on Epoll#wait (without holding onto the GVL). This allows a single, one-shot notification to wake up a single thread (another notification to a different IO object would wake up another thread). This allows using the same multi-threaded, EPOLLONESHOT-based design as cmogstored: http://bogomips.org/cmogstored/queues.txt commit ec3be1488e53036a9a502fbb670ea584c41d5ade Author: Eric Wong Date: Thu Mar 22 08:27:31 2012 +0000 test_epoll: disable expensive test without STRESS Tests run a lot faster, now, and this isn't functionality we have to worry about often now that I better understand MRI internals. commit e38bb616f8dc15ba3cf082388aca75ac449645e6 Author: Eric Wong Date: Thu Mar 22 08:24:59 2012 +0000 sleepy_penguin.h: add prototype for rb_thread_io_blocking_region This function is exposed in the libruby-static archive for Ruby 1.9.3, but there is no publically-declared prototype for it. commit c72bc3f27b1ea65baa36eba3d24a32a1b9647ac1 Author: Eric Wong Date: Wed Mar 7 09:21:45 2012 +0000 epoll: split out ugly green thread code It's ugly and confusing to look at, so split it out. commit c309a1eca250ae55f454f5cbe9248191d7ff0e82 Author: Eric Wong Date: Thu Feb 23 08:15:21 2012 +0000 test: new testcase for edge-triggered accept Found uncommited in my working directory, I can't remember when/where I wanted to test this, but we might as well for documentation purposes... commit ef6beed6ae65e1d66e7a23a61aadee68a65d9757 Author: Eric Wong Date: Tue Jul 26 17:20:10 2011 -0700 use sleepy.penguin@librelist.org address instead of .com Neither we nor librelist are commercial projects, so use the TLD preferred for non-profit entities. commit c77c7e4cf7f2850d7163db3fcbed5a0ef829edb9 Author: Eric Wong Date: Tue Jul 26 17:11:43 2011 -0700 disable SignalFD interface It's a waste of memory to have something that has no chance of working reliably with any existing Ruby runtimes. commit 73732a743e90cb40336946168619e0d328f7e213 Author: Eric Wong Date: Tue Jul 26 17:07:27 2011 -0700 rb_update_max_fd() support for epoll This is the only descriptor we manage ourselves and don't use IO.for_fd with (epoll is quite "special" wrt fork). commit 39a80da93d03c30b4e39e9363e0233a891c83935 Author: Eric Wong Date: Thu Jun 16 07:45:40 2011 +0000 fix unused variable warnings Oops... commit e71c6f4f4a79ae6d21a0da1a767af2ed168df0f3 Author: Eric Wong Date: Wed Jun 15 16:36:56 2011 -0700 timerfd: add new constants from 2.6.39 and 3.0 We still need to document these. ref: http://www.man7.org/tlpi/api_changes/ commit c4e6fa6fed7213ca4f7ac270b56bfd4c044c7b91 Author: Eric Wong Date: Wed Jun 8 17:00:42 2011 -0700 test_epoll: add level trigger test Just to ensure we still work with level triggered usage.