ChangeLog in sleepy_penguin-3.1.0.26.g7181 vs ChangeLog in sleepy_penguin-3.2.0
- old
+ new
@@ -1,6 +1,306 @@
ChangeLog from http://bogomips.org/sleepy_penguin.git
+ commit f039e80b90260f7c4a831806ddc4d22fc9d27eb4
+ Author: Eric Wong <normalperson@yhbt.net>
+ Date: Tue Jul 16 18:09:51 2013 +0000
+
+ sleepy_penguin 3.2.0 - minor bug fixes, preliminary kqueue support
+
+ 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.
+
+ commit 1694820af3bb917556404f61a1a1e19e845bc181
+ Author: Eric Wong <normalperson@yhbt.net>
+ Date: Fri May 3 18:55:31 2013 +0000
+
+ pkg: include generated version header in distribution
+
+ Oops, the lack of this header prevented gems from being
+ built + installed properly.
+
+ commit aa4958b713e3979af863410f410d2529fe6764c2
+ Author: Eric Wong <normalperson@yhbt.net>
+ Date: Wed May 8 22:07:43 2013 +0000
+
+ test_epoll_io: ensure subclassing Epoll::IO works
+
+ A subclass may want to set CLOEXEC by default.
+
+ commit 5a757f1515d4131ad4f6f1203dd6a117a9005d4f
+ Author: Eric Wong <normalperson@yhbt.net>
+ Date: Fri May 3 18:45:06 2013 +0000
+
+ auto-generate SLEEPY_PENGUIN_VERSION constant
+
+ This allows the Ruby-visible constant to always be up-to-date
+ with the release.
+
+ commit a64016a9c6e80302da46b46b96fa2f3765ea5591
+ Author: Eric Wong <normalperson@yhbt.net>
+ Date: Thu May 2 23:00:03 2013 +0000
+
+ README: update with latest features
+
+ We support kqueue and Rubinius. Nowadays, we also export
+ the potentially dangerous low-level APIs for epoll and kqueue.
+
+ commit 565b92da156ddf268634c3e1076d51d811ff0dc6
+ Author: Eric Wong <normalperson@yhbt.net>
+ Date: Fri May 3 01:18:43 2013 +0000
+
+ test_kqueue_io: additional test for IO-likeness
+
+ We need to ensure Kqueue::IO remains IO-like
+
+ commit 33985d31bd01b32f6264ec7d87f40dcbb0c924be
+ Author: Eric Wong <normalperson@yhbt.net>
+ Date: Fri May 3 01:12:14 2013 +0000
+
+ kqueue: remove timeout handling for nevents==0
+
+ The underlying kevent() itself already bypasses the timeout
+ if nevents==0 (so it is impossible to emulate a sleep function
+ with kevent()).
+
+ commit 1ba2600636f9080792408e134acc4c8f226d0930
+ Author: Eric Wong <normalperson@yhbt.net>
+ Date: Fri May 3 00:53:01 2013 +0000
+
+ doc: flesh out kqueue-related documentation
+
+ Hopefully this will lead to less confusion among new
+ users.
+
+ commit 6b2c95c50a241fa7bd362a6022dedfdc5921db9f
+ Author: Eric Wong <normalperson@yhbt.net>
+ Date: Thu May 2 03:00:05 2013 +0000
+
+ do not propagate Errno::EINTR into Ruby
+
+ To be consistent with I/O wrappers in Ruby, Ruby-land should
+ never see EINTR from kevent or epoll_wait. We will just return
+ zero events if our timeout expired soon after we got signaled.
+
+ commit 05448f74a80b631410f0c39ea4b333d26acec074
+ Author: Eric Wong <normalperson@yhbt.net>
+ Date: Tue Apr 30 02:24:19 2013 +0000
+
+ test_epoll: workaround race condition in test_close
+
+ Wait longer before killing the epoll_wait thread, as we may not
+ have entered epoll_wait inside that thread before we send
+ Thread#kill to it. This caused intermittent IOError as the
+ thread delected the Epoll::IO object was already closed, before
+ the snapshot (to prevent GC) could be made.
+
+ commit c1fdf07413364407d148fb588cd1c2ba1fe7f677
+ Author: Eric Wong <normalperson@yhbt.net>
+ Date: Tue Apr 30 02:05:22 2013 +0000
+
+ epoll: clear FD marks snapshot before returning
+
+ This allows the heap to reclaim memory sooner (than waiting for
+ GC), lowering memory usage and perhaps speeding up future
+ allocations.
+
+ commit d5e6ab56efd5a3c538c8f31b120c0dff6dbcf38a
+ Author: Eric Wong <normalperson@yhbt.net>
+ Date: Tue Apr 30 01:49:52 2013 +0000
+
+ test_epoll: increase delay between signal spamming
+
+ Frequently sending signals can lead to high memory usage and
+ slowdowns on some Ruby + malloc implementations.
+
+ commit b7221617908d5cd73da17c11beb7ef96b12e7fa5
+ Author: Eric Wong <normalperson@yhbt.net>
+ Date: Tue Apr 30 00:02:01 2013 +0000
+
+ test_epoll: join thread before return from test
+
+ We want to avoid closing the descriptor while the thread
+ is running.
+
+ commit da07e5676040d543c33720efae19f2a70e766a39
+ Author: Eric Wong <normalperson@yhbt.net>
+ Date: Mon Apr 29 20:55:10 2013 +0000
+
+ kqueue: workaround lack of RSTRUCT* macros on Rubinius
+
+ Rubinius will not support RSTRUCT* macros, so converting the
+ structs to arrays is the least intrusive way to go about our
+ code.
+
+ ref: https://github.com/rubinius/rubinius/issues/494
+
+ commit a974d3acb4cf59696c71f82004e2b42d1c1903d9
+ Author: normalperson@yhbt.net <normalperson@yhbt.net>
+ Date: Mon Apr 29 20:07:52 2013 +0000
+
+ kqueue/io: fix MRI 1.8 support code for event retrieval
+
+ First off, the timeout is not handled properly when timing out,
+ resulting in an infinite loop.
+
+ Secondly, arguments were not passed to the yielded block correctly.
+
+ Finally, the return value of kevent was not returned correctly to
+ the caller.
+
+ commit dbcc2af6f5ec958fb71d96d20ebdcd7860be8274
+ Author: normalperson@yhbt.net <normalperson@yhbt.net>
+ Date: Mon Apr 29 20:06:59 2013 +0000
+
+ test_kqueue: only test if IO#autoclose= exists
+
+ The high-level kqueue class is not usable without IO#autoclose
+
+ commit cd946812abada277c9c8b85d9165748ef066abbf
+ Author: normalperson@yhbt.net <normalperson@yhbt.net>
+ Date: Mon Apr 29 19:52:37 2013 +0000
+
+ test_kqueue_io: join thread in test when done using
+
+ Due to strange scheduling, the ensure clause could fire while
+ the thread was still inside wr.syswrite even though the main
+ thread received the event and exited the method.
+
+ commit c04b173f52c362c64899bd7b2942cab0658e1cee
+ Author: Eric Wong <normalperson@yhbt.net>
+ Date: Mon Apr 29 19:36:40 2013 +0000
+
+ test_epoll: workaround MRI 1.8 threading bug
+
+ Threads do not seem safe to start inside signal handlers on
+ Matz Ruby 1.8
+
+ commit 98af77f834ca0a821a091085a3fdc5e645f704fc
+ Author: Eric Wong <normalperson@yhbt.net>
+ Date: Mon Apr 29 19:30:25 2013 +0000
+
+ kqueue: set zero timeout if not retrieving events
+
+ Having a timeout does not make sense if not retrieving events,
+ so avoid potentially triggering bugs or strange behavior between
+ different kqueue implementations.
+
+ commit d0f40416ce43a9148a4a2f397f6bc606a39688b2
+ Author: Eric Wong <normalperson@yhbt.net>
+ Date: Mon Apr 29 19:11:42 2013 +0000
+
+ test_timerfd: relax timing-sensitive test
+
+ This test failed on overloaded systems (and may still fail)
+ Unfortunately timers are hard to test as system latency
+ must be taken into account.
+
+ commit bb70a4e003997e6eceea0d03cd941a46ec165f82
+ Author: Eric Wong <normalperson@yhbt.net>
+ Date: Mon Apr 29 19:00:39 2013 +0000
+
+ test_kqueue_io: test for multiple event return
+
+ This is not _my_ common use case, but some people may
+ want to fetch multiple events at once.
+
+ commit 8575d11394a84cef2a8a8bddb21ec79e8a841a59
+ Author: Eric Wong <normalperson@yhbt.net>
+ Date: Mon Apr 29 18:59:48 2013 +0000
+
+ test_kqueue: join thread after test
+
+ It's good to cleanup after ourselves.
+
+ commit 047f284170072de8d8caf0fb6e79019eb453b58a
+ Author: Eric Wong <normalperson@yhbt.net>
+ Date: Fri Apr 26 20:30:56 2013 +0000
+
+ fork-safe "to_io" in high-level epoll/kqueue
+
+ We need to validate the underlying IO object before using
+ it in a forked child.
+
+ commit 6b631c291e7220daad2954a129153de774a76572
+ Author: Eric Wong <normalperson@yhbt.net>
+ Date: Fri Apr 26 20:02:11 2013 +0000
+
+ test_epoll: avoid sleeping inside a signal handler
+
+ It's generally unsafe to sleep inside a signal handler, and
+ seems to cause intermittent test failures.
+
+ commit d1b31d49b2c376ce3c7691b5037d5edea517fb09
+ Author: Eric Wong <normalperson@yhbt.net>
+ Date: Thu Apr 25 18:36:54 2013 +0000
+
+ test: remove Rubinius-specific checks and skips
+
+ These skips no longer seem needed. Removed the GC tests since
+ they were unreliable (even on MRI), anyways.
+
+ commit ba9848c3ce97e7d0e494fccfccc94c778c7d5188
+ Author: Eric Wong <normalperson@yhbt.net>
+ Date: Thu Apr 25 08:17:11 2013 +0000
+
+ test_epoll: remove assert_nothing_raised
+
+ assert_nothing_raised hides backtraces on real errors,
+ so we'll stop doing it, now.
+
+ commit f7cb886cfde08a5217d0d4370285e2b5cabd481f
+ Author: Eric Wong <normalperson@yhbt.net>
+ Date: Thu Apr 25 04:03:48 2013 +0000
+
+ preliminary kqueue support
+
+ This is still a work-in-progress, but allows us to support
+ using a kqueue descriptor from multiple threads.
+ (e.g. one thread waiting with kevent, while another thread
+ modifies the watch list via kevent)
+
+ commit b57b0fa2bda6c755d366df0dc0579e244fb167a8
+ Author: Eric Wong <normalperson@yhbt.net>
+ Date: Wed Apr 24 20:10:15 2013 +0000
+
+ pkg.mk: allow passing arguments to extconf
+
+ This allows us to use something like:
+
+ make build EXTCONF_ARGS='--with-kqueue-include=/usr/include/kqueue \
+ --with-kqueue-libs=-lkqueue'
+
+ To build with libkqueue.
+
+ commit 07871a12535da6cd58abf58f8a3f8dca3dffbb6e
+ Author: normalperson@yhbt.net <normalperson@yhbt.net>
+ Date: Tue Apr 23 22:53:36 2013 +0000
+
+ allow building without epoll (or inotify) support
+
+ We will support kqueue on FreeBSD-based systems.
+
commit 7181b7e4da11894b59caebc1c864deca06a780b2
Author: Eric Wong <normalperson@yhbt.net>
Date: Sun Apr 21 03:48:27 2013 +0000
epoll: enforce maxevents > 0 before memory allocation