--- Coro/Changes 2008/05/09 17:29:19 1.341 +++ Coro/Changes 2008/11/20 03:11:29 1.446 @@ -1,13 +1,230 @@ Revision history for Perl extension Coro. -TODO: should explore PerlIO::via::CoroCede and PerlIO::via::CoroAIO. +TODO: should explore PerlIO::coroaio (perl leaks like hell). TODO: maybe implement a default message channel, very much like Erlang's actor model (which is cool in a lot of important aspects (failures!), but very lacking in others (higher level ipc)). - TODO: Coro::AnyEvent +TODO: async_pool to SLF +TODO: _cancel to xs +5.0 + - NEW ARCHITECTURE: use the latest 4.x version if you experience + stability issues. + - bump API version to 7 - all dependents must be recompiled. + - removed timed_* functions - they were not being used anyways + and should be replaced by a more generic mechanism - + and were annoying to support anyways :) + - removed SemaphoreSet's waiter method - use sem instead. + - Coro::Semaphore->adjust didn't correctly wake up enough waiters. + - async_pool did free a scalar value twice + ("Attempt to unreference..."). + - fix a disastrous bug in the readline optimisation + introduced in 4.801. + - fix a longstanding bug where calling terminate on a coro that + was waiting for a semaphore that was just becoming available + would cause a deadlock (semaphore would get into a state where + it was available but waiters were still blocked). + - calling throw on a coroutine that is waiting for a semaphore will + no longer make it acquire the semaphore (and thus leak a count). + - perl's process emulation is now not even theoretically supported + anymore. + - new functions Coro::rouse_cb and Coro::rouse_wait. + - new function Coro::Semaphore::wait. + - use named constants in Coro::Channel (Richard Hundt). + - directly patch the entersub opcode calling SLF functions (cede, + transfer and so on). this does speed up context switching, but + more importanly, it frees us from the hardcoded behaviour of + entersub, so we might actually be able to return something from + those functions and atcually create new ones. + - take advantage of __builtin_frame_address on gcc. + - expose THX in coroapi (not sure whether this was a wise decision, + as "threaded" perls are running at half speed anyways). + - implement execute_slf (schedule-like-function) interface that makes + it possible to implement schedule-like-functions in XS. + - use new SLF interface to massively speed up Coro::EV by roughly a + factor of two. + - used new SLF interface to massively speed up Coro::Semaphore by a + factor of three. + - used new SLF interface to speed up Coro::AIO by roughly a factor of + four and reduce its memory usage considerably. + - implement Coro::SemaphoreSet purely in terms of Coro::Semaphore, + for a nice speedup and vastly more correct behaviour. Also implement + a new method "sem" to get at the underlying semaphore object. + - implement Coro::Channel in terms of Coro::Semaphore, for a moderate + (in comparison) 20-40% speedup. + - used new SLF interface to reimplement Coro::Signal gaining + some unknown (because I was too lazy), but certain, speedup, and also + making signals reliable for the first time. + - used new SLF interface and other optimisations to speed up async_pool + by a factor of two. It also doesn't rely on perl's exception mechanism + to exit anymore. The overhead for terminating an async_pool, coro over + a normal async is now very small. + - sped up coroutine creation/destruction by 40%. + - forgot to include Coro/libcoro/README in the dist for all these years. + - work around a freebsd pthreads bug (manual testcancel is required as + pthread_cond_wait isn't a cancellation point on freebsd). + - use new rouse functions to speed up and simplify Coro::BDB. + - make "prefer perl native functions" work with threaded perls. + - condense Coro::Debug ps output, hint at v and w flags. + - (libcoro) lots of minor cleanups and portability improvements. + +4.913 Sat Nov 15 07:58:28 CET 2008 + - async_pool did free a scalar value twice + ("Attempt to unreference..."). + +4.912 Thu Nov 13 18:31:23 CET 2008 + - minor cleanups. + - use much larger stacks on linux and perl < 5.8.8. + - Coro::Debug::new_unix_server did not unlink the socket + when destroyed. + +4.911 Tue Nov 11 04:26:17 CET 2008 + - "port" to threaded perls. + +4.91 Mon Nov 10 05:36:38 CET 2008 + - the ->throw exception object no longer leaks. + - creating a new cctx leaked a scopestack entry (memleak). + - new coroutines didn't get created with a zero flags field + (unknown impact). + - calling ->throw on a not-yet-started coroutine should now work + instead of being ignored. + - ->throw is now supported on Coro::State objects. + - clean up cctx creation code a bit. + - entersub is actually a UNOP, not a LOGOP (not a bugfix). + +4.9 Sat Nov 8 17:45:27 CET 2008 + - (libcoro) did not preserve rbp with CORO_ASM (we are getting there). + - (libcoro) no longer leak threads in the experimental pthread backend, + also speed it up considerably. + - (libcoro) do not rely on makecontext passing void *'s unscathed. + - fix compiletime dependencies on libcoro in the Makefile. + - cctx_count wasn't always updated properly. + - Coro::State::cctx_stacksize wasn't applied correctly. + - new function Coro::State::cctx_max_idle. + - the default max number of idle C contexts is now 4. + - (libcoro) try harder to get _setjmp/_longjmp. + - (libcoro) cleanup and extend the libcoro API to officially + allow the creation of empty source contexts. + - very experimental workaround for the totally broken netbsd platform. + - tried to hack around openbsd bugs. + +4.804 Wed Nov 5 16:36:00 CET 2008 + - Coro::Debug::new_unix_server would not create a non-blocking listening + socket, sometimes causing freezes. + - (libcoro) fix misaligned stack points for setjmp and assembly + methods, which can cause crashes on x86/x86_64 with a sufficiently + aggressive compiler. + - new function: Coro::Debug::new_tcp_server. + - move ->throw into the Coro class because it only works on coro objects. + +4.803 Mon Nov 3 17:16:12 CET 2008 + - (libcoro) use a global asm statement to become independent of gcc + otpimisations for CORO_ASM (thanks to pippijn for the idea). + - try to workaround yet another broken bsd, this time dragonfly. + +4.802 Thu Oct 30 10:56:12 CET 2008 + - support -fno-omit-frame-pointer on x86 with the assembly method. + - tune 01_unblock.t tests a bit. + +4.801 Wed Oct 22 18:33:37 CEST 2008 + - improve readline speed for very long "lines". + - backport to 5.8.8. + +4.8 Thu Oct 2 13:34:40 CEST 2008 + - new function Coro::AIO::aio_wait. + - Coro.:AIO and Coro::BDB now "use Coro::AnyEvent". + - greatly speed up and reduce memory usage of Coro::AIO requests. + - implement some other ยต-optimisations. + +4.749 Mon Sep 29 14:40:12 CEST 2008 + - port to slow and broken pseudo-threaded perls. (courtesy pippijn). + +4.748 Sat Sep 27 14:03:19 CEST 2008 + - implement, but do not document, PerlIO::cede(granularity). + - Coro::Storable forgot to wrap Storable::pstore. + - work around the multitude of leaks and memory corruption + bugs in PerlIO::via by using our own C-level perliol. As a side + effect, Coro::Storable is now much, much, much faster. + +4.747 Tue Sep 23 01:59:41 CEST 2008 + - fix a per-cv memleak (one empty array was leaked per + code reference). + - avoid a crash in coro->call|rss when the coroutine was already + destroyed (most noticably when using Coro::Debug::ps :) + - also protect *Storable::FILE. + - push up default storable granularity to 20ms. + +4.746 Sun Sep 21 03:22:20 CEST 2008 + - be more insistent on locking Storable against reentrancy + in Coro::Storable. + - move swap_def?v and throw to Coro::State, as documented. + +4.745 Thu Jul 24 00:14:38 CEST 2008 + - remove debugging code related to MgPV_nolen_const, also try to + make it compile with perl 5.8.6 (yes, apple apparently loves + outdated software). Reported by John S. + +4.744 Tue Jul 8 22:06:35 CEST 2008 + - correctly provide default DIE/WARN handlers as documented. + - also overwrite PL_vtbl_sigelem.svt_clear, even though current + implementations inside perl work fine for us. + +4.743 Mon Jun 16 00:21:57 CEST 2008 + - when using Coro::EV without running EV::loop it could + result in busy-waiting for events, this has been fixed. + - reduce codesize and improve performance by using EV_DEFAULT_UC. + +4.742 Sat May 31 14:10:21 CEST 2008 + - implement a workaround for (some) perl <5.8.8 versions. + - require EV 3.3+. + +4.741 Fri May 30 23:33:09 CEST 2008 + - tell netbsd how utterly broken their imitation of an OS is + and refuse to build by default if pthreads are in use. + - switch to "s" method on all bsd's by default, as their ucontext + stuff seems just too broken. + - fix a bug in Coro::Select. + +4.74 Thu May 29 20:05:31 CEST 2008 + - do not test Coro::LWP for lack of dependencies. + - do not test Coro::Select for lack of working perls. + +4.73 Thu May 29 2008 + - fix a bug in Coro::EV which would cause it to block despite + there being runnable coroutines. + - sprinkle "no warnings" freely over everything, also suppress + warnings for some other modules. + - fix typo in WSAEWOULDBLOCK. + +4.72 Sun May 25 05:14:36 CEST 2008 + - tweak META.yaml a bit, unfortunately, there is no documented way + to have optional dependencies with CPAN. doh :( + - avoid running some tests on windows because they would fail due to + perl bug (broken fork, broken pipes...). + - work around perl on windows bugs where perl returns undocumented + error codes for sysread, syswrite etc. by taking advantage + of AnyEvent's workaround for that problem. + - use AnyEvent::Util::fh_nonblocking in Coro::Handle to work around + a common perl implementation bug on windows. + - use unix domain sockets in testsuite to work around + common perl implementation bugs on widows (they are emulated by + tcp sockets on windows. ugh.) + +4.71 Sat May 24 20:01:27 CEST 2008 + - fix a bug in Coro::AnyEvent ("Usage: Coro::AnyEvent::_schedule()"). + - take advantage of async name resolution of AnyEvent::Util. + - work around brutal inet_aton override in Coro::LWP. + - take advantage of the readyhook in Coro::EV, for smoother + scheduling. + +4.7 Sun May 11 00:32:19 CEST 2008 + - completely reworked the Coro manpage. + - added Coro::AnyEvent, generic event loop integration. - implement cancel, ready and kill commands in Coro::Debug. - document find_coro in Coro::Debug. + - incompatible change: rename has_stack to has_cctx. + - Coro::AIO and Coro::BDB no longer force event model detection, + use AnyEvent::AIO and AnyEvent::BDB. 4.6 Sat Apr 26 10:05:14 CEST 2008 - INCOMPATIBLE CHANGE: sub/code attributes are no longer supported