=== sleepy_penguin 3.2.0 - minor bug fixes, preliminary kqueue support / 2013-07-16 18:25 UTC epoll support and thread-safety improvements. The dangerous Epoll::IO interface is now an option for those who want to share an epoll descriptor across fork and maintain their own IO object references to avoid extra overhead. Use the regular (high-level) Epoll interface unless you're willing to shoot yourself in the face. There is also preliminary Kqueue support (which should work under libkqueue on Linux). Similar to our epoll interface (and unlike most event libraries/frameworks) our kqueue interface also supports one-shot notifications and _embraces_ multi-threaded use. Note: unlike epoll, kqueue has close-on-fork behavior, so kqueue descriptors are not (ever) inheritable across fork. Added EPOLLWAKEUP constant (Linux 3.5 + glibc 2.17 required) to allow descriptors to prevent system suspend while active (this requires the CAP_BLOCK_SUSPEND privilege). Inotify and Epoll interfaces now use thread-local buffers for thread-safety and improved concurrency without GVL. Errno::EINTR is no longer propagated into Ruby-land, for consistency with existing Ruby IO APIs. === sleepy_penguin 3.1.0 - minor fixes and features / 2012-05-02 09:01 UTC * 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") === sleepy_penguin 3.0.1 - really avoids EINTR / 2011-05-21 02:40 UTC One bugfix: * epoll: avoid race condition in EINTR checking Even if we timeout while getting an EINTR, we'll retry epoll_wait() with a zero timeout like IO.select does in Ruby to avoid raising Errno::EINTR. === sleepy_penguin 3.0.0 / 2011-05-21 00:22 UTC Epoll#wait always waits the specified amount of time and never raises Errno::EINTR. Disabled operations on Fixnum file descriptors, only IO objects may be passed to Epoll methods. Cross-thread Epoll#close behavior matches Ruby 1.9.3dev. Improved Rubinius support (lightly tested). === sleepy_penguin 2.0.0 / 2011-03-10 04:43 UTC There are many internal cleanups, bugfixes, and incompatible API changes. The API will probably be stable from now on. All the flag passing is less verbose, in the past you had to do: tfd = TimerFD.new(TimerFD::CLOEXEC|TimerFD::NONBLOCK) Now, you can just do (the old way still works): tfd = TimerFD.new([:CLOEXEC, :NONBLOCK]) A SignalFD interface now exists, but is not recommended since MRI signal handling seems to conflict with it. Inotify#close no longer holds the GVL while closing the descriptor since it is an expensive operation. See git log v1.4.0..v2.0.0 for all the gory details. === sleepy_penguin 1.4.0 - Linux I/O events for Ruby / 2011-02-04 22:27 UTC * Epoll#wait: do not automatically retry on EINTR * preliminary Inotify support * Epoll.new no longer defaults to close-on-exec TODO: FANotify + SignalFD === sleepy_penguin 1.3.1 - safety checks for delete / 2011-01-22 00:52 UTC One bugfix for Epoll#delete: Eric Wong (1): safer closed checks for proxied objects === sleepy_penguin 1.3.0 - incremental improvements / 2011-01-21 23:12 UTC This release introduces compatibility with pre-EPOLLRDHUP systems. It also optimizes syscalls away for Epoll#set and Epoll#delete. Epoll#add, Epoll#mod and Epoll#del should no longer be needed in most code. === sleepy_penguin 1.2.0 - epoll GC help / 2011-01-15 12:06 UTC One convenience fix: epoll: prevent IO objects from getting GC-ed Users of our code may forget to keep references for their IO objects at all, and since it's not possible for GC to mark kernel memory, we just hold on to the IO objects for them. We can't unmark close()d file descriptors, ever, so we don't bother with the EPOLL_CTL_DEL case, either. Just storing IO objects in an array using the raw descriptor as a key will allow bounded space usage just like the in-kernel FD tables as long as the user remembers to close descriptors themselves. === sleepy_penguin 1.1.1 - soft feathers, soft delete / 2011-01-13 22:41 UTC SleepyPenguin::Epoll#delete method added for "soft" failures Documentation updates and cleanups, the website is now JavaScript-free! (Ignore the 1.1.0 "release", it was a lie) === sleepy_penguin 1.0.0 / 2010-09-26 06:31 UTC Initial release