--- Coro/Changes 2008/11/10 20:38:33 1.401 +++ Coro/Changes 2008/12/15 16:22:34 1.482 @@ -5,6 +5,147 @@ actor model (which is cool in a lot of important aspects (failures!), but very lacking in others (higher level ipc)). +5.13 + - EXPERIMENTAL: implement dynamic winds (on_enter/on_leave). + - don't set diehook to C but instead to NULL, to avoid + spurious warnings. + - fix a lot of bugs in Coro::SemaphoreSet. + - Coro::SemaphoreSet will less often create a semaphore needlessly. + - add Coro::SemaphoreSet::count and wait methods. + - take advantage of the new Guard module. + - deprecate Coro::guard. + - try to fix the dreaded 01_unblock tests once more. I hate it when + testsuites need more fixing than the code they are supposed to test. + - croak in more cases when a required callback isn't resolvable. + - fix some minor issues in Coro::State->call/eval. + - use current coroutine context instead of a temporary one + when temporarily switching to another coroutine. + +5.12 Sun Dec 7 13:30:38 CET 2008 + - add default config for MirOS, which seems to be a bug-to-bug + compatible fork of openbsd ("world domination by releasing + openbsd cvs before the openbsd folks do it" or so :). + - free_padlist did destroy the names pad, not good, but didn't + seem to bother perl - this could fix issues such as eval "" + inside a function called from multiple coroutines. + - use a different method to detect destruction time. + - be more careful when freeing padlists just before global + destruction. + - fixed and expanded the call/cc example. + - renamed _terminate to _coro_run. + - new method Coro::Channel->shutdown. + - try pthreads on openbsd <4.4 (broken sigaltstack, will + pthreads fare better?). + - be less picky about destroying "a" running coroutine. + +5.11 Tue Nov 25 21:49:05 CET 2008 + - DEBUGGING in 5.10.0 is a mess: it constantly flags perfectly + working code with failed assertions, introducing more bugs than + it fixes, requiring elaborate workarounds :( + +5.1 Mon Nov 24 08:54:59 CET 2008 + - wrote a small introductory tutorial - Coro::Intro. + - convert Coro::Timer, Coro::Select and Coro::Util to rouse API. + - Coro::Select did errornously dup the file descriptors + and didn't work with all AnyEvent backends. + - Coro::Select wasn't imported correctly form Coro::LWP, causing blocking + LWP data transfers. + - disassociate c contexts from coro objects - this is agruably more + correct, but mostly allows sharing of cctxs between coro and state + objects, for added memory savings and speed increases. + - bumped $Coro::POOL_RSS up to 32kb by default. + - no longer set the optype to OP_CUSTOM, as B::* understandably + doesn't like this very much (and we *are* a type of entersub). + - implement state cloning, just to prove that call/cc can be done. + - automatically load Coro::AnyEvent in Coro::Handle. + - wrap ->cancel calls in eval inside Coro::Handle as EV watchers + do not have this method (and don't need it either). + - speed up generic anyevent methods in Coro::Handle by using rouse + callbacks. + - allow coroutines in $Coro::IDLE, speeding up Coro::AnyEvent and + others. It also makes the debugger happier, as you can trace + through the idle threads now. + - add comppad_name* and hints ($^H, %^H) to per-thread variables. + - eg/event was pretty broken. + - better 5.8.6 compatibility. + +5.0 Thu Nov 20 10:35:05 CET 2008 + - 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 method instead. + - Coro::Semaphore->adjust didn't correctly wake up enough waiters. + - async_pool did free a scalar value twice + ("Attempt to unreference..."). + - 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 for easier + conversion of callback-style to blocking-style. + - new methods $coro->schedule_to and ->cede_to, to specifically + schedule or cede to a specific coroutine. + - 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.914 Wed Nov 19 12:54:18 CET 2008 + - fix a disastrous bug in the readline optimisation + introduced in 4.801. + +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