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

Comparing Coro/README (file contents):
Revision 1.33 by root, Tue Mar 4 06:13:24 2014 UTC vs.
Revision 1.34 by root, Sun Jun 1 19:55:42 2014 UTC

661 if the thread is inside a C callback that doesn't expect to be 661 if the thread is inside a C callback that doesn't expect to be
662 canceled, bad things can happen, or if the cancelled thread insists 662 canceled, bad things can happen, or if the cancelled thread insists
663 on running complicated cleanup handlers that rely on its thread 663 on running complicated cleanup handlers that rely on its thread
664 context, things will not work. 664 context, things will not work.
665 665
666 Any cleanup code being run (e.g. from "guard" blocks) will be run 666 Any cleanup code being run (e.g. from "guard" blocks, destructors
667 without a thread context, and is not allowed to switch to other 667 and so on) will be run without a thread context, and is not allowed
668 to switch to other threads. A common mistake is to call "->cancel"
669 from a destructor called by die'ing inside the thread to be
670 cancelled for example.
671
668 threads. On the plus side, "->cancel" will always clean up the 672 On the plus side, "->cancel" will always clean up the thread, no
669 thread, no matter what. If your cleanup code is complex or you want 673 matter what. If your cleanup code is complex or you want to avoid
670 to avoid cancelling a C-thread that doesn't know how to clean up 674 cancelling a C-thread that doesn't know how to clean up itself, it
671 itself, it can be better to "->throw" an exception, or use 675 can be better to "->throw" an exception, or use "->safe_cancel".
672 "->safe_cancel".
673 676
674 The arguments to "->cancel" are not copied, but instead will be 677 The arguments to "->cancel" are not copied, but instead will be
675 referenced directly (e.g. if you pass $var and after the call change 678 referenced directly (e.g. if you pass $var and after the call change
676 that variable, then you might change the return values passed to 679 that variable, then you might change the return values passed to
677 e.g. "join", so don't do that). 680 e.g. "join", so don't do that).
682 actually destruct the Coro object. 685 actually destruct the Coro object.
683 686
684 $coro->safe_cancel ($arg...) 687 $coro->safe_cancel ($arg...)
685 Works mostly like "->cancel", but is inherently "safer", and 688 Works mostly like "->cancel", but is inherently "safer", and
686 consequently, can fail with an exception in cases the thread is not 689 consequently, can fail with an exception in cases the thread is not
687 in a cancellable state. 690 in a cancellable state. Essentially, "->safe_cancel" is a "->cancel"
691 with extra checks before canceling.
688 692
689 This method works a bit like throwing an exception that cannot be 693 It works a bit like throwing an exception that cannot be caught -
690 caught - specifically, it will clean up the thread from within 694 specifically, it will clean up the thread from within itself, so all
691 itself, so all cleanup handlers (e.g. "guard" blocks) are run with 695 cleanup handlers (e.g. "guard" blocks) are run with full thread
692 full thread context and can block if they wish. The downside is that 696 context and can block if they wish. The downside is that there is no
693 there is no guarantee that the thread can be cancelled when you call 697 guarantee that the thread can be cancelled when you call this
694 this method, and therefore, it might fail. It is also considerably 698 method, and therefore, it might fail. It is also considerably slower
695 slower than "cancel" or "terminate". 699 than "cancel" or "terminate".
696 700
697 A thread is in a safe-cancellable state if it either hasn't been run 701 A thread is in a safe-cancellable state if it either hasn't been run
698 yet, or it has no C context attached and is inside an SLF function. 702 yet, or it has no C context attached and is inside an SLF function.
699 703
700 The latter two basically mean that the thread isn't currently inside 704 The latter two basically mean that the thread isn't currently inside

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines