Coro
view release on metacpan or search on metacpan
- remove unused hv_sig.
6.47 Sat Jul 11 03:58:20 CEST 2015
- swap_svs - NVs can be in the SV head beginning with 5.20.
6.46 Tue Jun 30 14:36:30 CEST 2015
- restore portability to perls with windows fork emulation
(patch by Petr PÃsaÅ).
6.45 Tue Jun 30 01:40:08 CEST 2015
- restore portability to perl 5.16 and below.
6.44 Tue Jun 30 00:41:54 CEST 2015
- avoid segfaulting (or worse) when tracing a canceled thread.
- the Event module silently broke it's public hook API, causing
failures on perls compiled with -Duselongdouble. Requiring
the latest version of Event because I don't know which release
changed this (it's not mentioned in the ChangeLog).
- allow xs level enterleave hooks via CoroAPI.
6.43 Thu Jun 4 15:38:14 CEST 2015
- use stability canary.
- port to stableperl-5.22.0-1.001.
- update libecb.
6.42 Wed Feb 11 20:29:52 CET 2015
- Coro::SemaphoreSet->try did not actually work (analyzed by
SATO Kentaro).
- upgrade libecb to be C11 compliant.
6.41 Sat Sep 6 22:08:46 CEST 2014
- restore portability to perl 5.8.x.
- give new Coro's a valid GvHV(PL_hintgv) - this is slow and takes
up some memory, but fixes "use feature" and similar modules
when used inside a Coro.
- allow zero as argument to Coro::Channel to mean the same thing
as no argument. this works with older versions as well,
but wasn't legal until now.
- slightly better c header file detection.
6.39 Mon Jun 2 00:00:08 CEST 2014
- work around more incompatible changes in 5.20.
6.38 Sun Jun 1 21:54:23 CEST 2014
- check that perl slots actually have enough space to hold
interpreter variables.
- untested port to perl 5.19 (64 bit tmps indices) (reported
by Andreas König).
- croak when cancel is called without a thread context.
6.37 Tue Mar 4 13:27:33 CET 2014
- *sigh*, removed leftover debugging code from debugging a
perl bug, of all things.
6.36 Tue Mar 4 07:11:59 CET 2014
- semaphores would not clear the destroy hook when interrupted
by ->throw, causing segfaults or worse.
- ->throw on a thread waiting for a semaphore did not acquire
the semaphore, but also didn't wake up other waiters,
possibly causing a deadlock.
- "FATAL: $Coro::IDLE blocked itself" will now use Carp::confess
to report a full stacktrace, which should help find out
where the actual call is.
- "atomically" destroy data in slf_destroy, because it is
the right thing to do, just in case.
- disable ecb.h libm dependency, to compile on ancient systems
or under adverse conditions.
6.33 Mon Nov 18 11:26:27 CET 2013
- do not crash when freeing padlists with holes (in 5.18).
- tentative SVt_BIND 5.19 port/fix.
6.32 Tue Nov 5 15:35:35 CET 2013
- use a new algorithm to derive padlists for perl 5.18. The old
one could lead to 0-pointer accesses inside perl (reported
by Darin McBride).
6.31 Thu May 9 07:39:48 CEST 2013
- Coro::AIO requests would crash if the thread was ready'd
while the request was ongoing.
6.29 Wed May 8 02:55:18 CEST 2013
- when an on_destroy handler destructs the coro currently being
destructed a perl scalar could be accessed after being freed,
likely causing a crash.
6.28 Wed Mar 6 06:58:02 CET 2013
- clean remnants of existing __DIE__ and __WARN__ handlers so
they lose their magic and will not cause segfaults later
(testcase by Andrey Sagulin).
- improved Coro::State documentation a bit.
- Coro::Debug::command now flushes the output.
- add hack detection code for x32 abi, because the braindead slugs
who designed that made it look exactly like x86_64 without
providing proper compile time symbols to test for it. as a result,
this detection cannot work reliably.
- valgrind stack registering was broken.
- do not rely on Time::HiRes anymore in Coro::Debug.
6.23 Fri Dec 7 23:36:37 CET 2012
- use experimental fiber implementation on native windows
perls.
- use sizeof (void *) as multiplication factor for stack sizes,
to accomodate the totally braindamaged microsoft 64 bit "os".
- changed verifier host from win2k-ap510-32 to win7-sp516-32/64.
activeperl 5.16 crashes when PerlIO_define_layer is called due
to some bug in the perl dll, strawberry perl at least passes
the testsuite.
- implement Coro::Handle->peeraddr/host/port, for slightly
improved compatibility with LWP.
- implement 5.17 compatibility by almost blindly applying a
good-looking patch by Father Chrysostomos.
- move stack management functions into libcoro 3.
- libcoro version 3 "released".
- support magic values as timed_io_once args.
- recommend AnyEvent 7+ or EV 4+, also require EV
version 4 or newer for Coro::EV.
6.10 Tue Oct 9 01:14:27 CEST 2012
- updated ecb.h, it had a typo that caused it to not compile on many
big endian systems (reported by many people).
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.
by the Coro module. It was a mistake to have it in the first place.
- (experimental) support for activestate perl 5.10 (method "w").
- (experimental) support for strawberry perl (method "a").
- coro_sigelem_set did not return a value although it had to,
actual impact unknown.
4.51 Mon Apr 14 13:28:27 CEST 2008
- make it compile again on 5.8.
4.50 Thu Apr 10 09:43:17 CEST 2008
- I did it twice! (see 4.49).
4.49 Sun Apr 6 21:23:31 CEST 2008
- grr, instead of compiling the recent changes on 5.10 only they
were compiled on 5.8 only.
4.48 Sun Apr 6 20:36:46 CEST 2008
- allow coroutine switches during eval's under 5.10.x, as it seems
the parser is a per-interpreter option now, so this is safe
(this might fix the odd crashing bug).
- drop support for 5.9.x versions: they are dead, jim.
4.47 Sun Apr 6 00:37:52 CEST 2008
- force cctx allocation on API calls: we know we need to force one
and gcc actually manages to confuse our heuristic nowadays,
leading to crashes and worse.
- document force_cctx.
4.46 Fri Apr 4 22:05:43 CEST 2008
- upgrade libcoro, resulting in pthread-backend (which was only created
to fulfill the rules of the programming languages shootout).
4.45 Thu Mar 13 11:55:36 CET 2008
- fix a file leaking bug in eg/mhyttpd that would allow
downloading of any file (reported by oesi).
- fix deadlock bug in Coro::Channel (reported by Richard Hundt)
(also add testcase).
- support Broadcast option in Coro::Socket (patch by Richard Hundt,
apparently having loads of fun with that).
- implement $state->swap_defsv, ->swap_defav and document ->throw.
4.4 Wed Feb 13 16:44:29 CET 2008
- only assume .cfi pseudo isns exist on GNU/Linux.
- add get_timed method to Coro::Channels.
- fixed Coro::Debug manpage.
- perl 5.11 compatbility improvement based on patch by
Andreas König.
4.37 Sun Jan 20 11:25:23 CET 2008
- soften the check for an active parser for perl 5.10 (avoiding
"Coro::State::transfer called while parsing" in many cases).
4.36 Sun Jan 13 10:53:56 CET 2008
- reset diehook when terminating from an async_pool as to not
trigger any __DIE__ handlers.
4.35 Sun Jan 13 04:14:13 CET 2008
- "bt" debug command now displays any exceptions
from longmess and also skips the innermost
stackframes, giving more useufl output.
- allow backtraces in coroutines blocked in Coro::EV,
at a <1% speed hit.
- handle localising of $SIG{__WARN__} and __DIE__
properly (with a proper amount of dirty hacking).
4.34 Sat Dec 22 17:49:53 CET 2007
- upgrade to EV version 2.0 API.
4.33 Mon Dec 17 08:36:12 CET 2007
- make Coro::AIO etc. loadable in the absence of EV.
4.32 Mon Dec 17 07:46:02 CET 2007
- majorly improved Coro::Handle's performance with Coro::EV.
- implemented the until now mythical Coro::BDB module.
- specialcase EV in Coro::AIO and Coro::BDB for extra speed.
4.31 Wed Dec 5 12:32:39 CET 2007
- remove warn statement form Coro::Util.
4.3 Tue Dec 4 20:33:14 CET 2007
- calls to the idle function could cause stack corruption
when the stack changed.
- do no longer rely on the presence of EV::DNS if EV is used
(because it is gone), but instead take avdantage of EV::ADNS
if available.
- add ($) prototypes to all functions in Coro::Storable.
- use a conventional (safer) idle callback in Coro::EV.
- do accept quickly in Coro::Debug to avoid endless loops.
4.22 Fri Nov 30 16:04:04 CET 2007
- really use optimised versions for Event and EV in Coro::Util
and Coro::Handle.
4.21 Sun Nov 25 10:48:59 CET 2007
- fix a spurious memory read.
- Coro::EV no longer keeps the eventloop "alive".
4.2 Fri Nov 9 20:47:05 CET 2007
- enable/disable tracing from a new coroutine, not a pooled one.
- fix a memleak in Coro::Event.
- removed killall call from fork_eval.
- made sure store_fd is already loaded so that fork_eval
does not have to parse autoload in each subprocess.
- only use assembly method if -O switch is in $Config{optimize}.
- add (optional) Coro::EV module, so far the best event loop module
directly supported by Coro.
- if the event model is EV, use EV::DNS to resolve
stuff in Coro::Util.
- don't get confused by multiple event notifications in Coro::Handle.
- initial support for EV (libevent interface).
- require Event and EV using configure_requires, to force their existance.
4.13 Wed Oct 24 07:26:45 CEST 2007
- add Coro::Storable::blocking_thaw.
- use a vastly more complicated technique to localise
$SIG{__WARN/DIE__} that also works on perls <= 5.8.8.
- use a coroutine for the idle callback Coro::Event,
instead of running Event in the current coroutine context.
This also catches recursive invocations.
- actually report fork errors in gethostbyname and inet_aton.
( run in 2.588 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )