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