ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/Coro/Coro.pm
(Generate patch)

Comparing Coro/Coro.pm (file contents):
Revision 1.242 by root, Thu Dec 4 17:30:00 2008 UTC vs.
Revision 1.243 by root, Sat Dec 13 19:18:36 2008 UTC

537would cause a deadlock unless there is an idle handler that wakes up some 537would cause a deadlock unless there is an idle handler that wakes up some
538coroutines. 538coroutines.
539 539
540=item my $guard = Coro::guard { ... } 540=item my $guard = Coro::guard { ... }
541 541
542This creates and returns a guard object. Nothing happens until the object 542This function still exists, but is deprecated. Please use the
543gets destroyed, in which case the codeblock given as argument will be 543C<Guard::guard> function instead.
544executed. This is useful to free locks or other resources in case of a
545runtime error or when the coroutine gets canceled, as in both cases the
546guard block will be executed. The guard object supports only one method,
547C<< ->cancel >>, which will keep the codeblock from being executed.
548 544
549Example: set some flag and clear it again when the coroutine gets canceled
550or the function returns:
551
552 sub do_something {
553 my $guard = Coro::guard { $busy = 0 };
554 $busy = 1;
555
556 # do something that requires $busy to be true
557 }
558
559=cut 545=cut
560 546
561sub guard(&) { 547BEGIN { *guard = \&Guard::guard }
562 bless \(my $cb = $_[0]), "Coro::guard"
563}
564
565sub Coro::guard::cancel {
566 ${$_[0]} = sub { };
567}
568
569sub Coro::guard::DESTROY {
570 ${$_[0]}->();
571}
572
573 548
574=item unblock_sub { ... } 549=item unblock_sub { ... }
575 550
576This utility function takes a BLOCK or code reference and "unblocks" it, 551This utility function takes a BLOCK or code reference and "unblocks" it,
577returning a new coderef. Unblocking means that calling the new coderef 552returning a new coderef. Unblocking means that calling the new coderef

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines