$|=1; print "1..10\n"; # when two coros cancel each other mutually, # the slf function currently being executed needs to # be cleaned up, otherwise the next slf call in the cleanup code # will simply resume the previous call. # in addition, mutual cancellation must be specially handled # as currently, we sometimes cancel coros from another coro # which must not be interrupted (see slf_init_cancel). use Coro; print "ok 1\n"; my ($a, $b); sub xyz::DESTROY { print "ok 7\n"; $b->cancel; print "ok 8\n"; } $b = async { print "ok 3\n"; cede; print "ok 6\n"; $a->cancel; print "not ok 7\n"; }; $a = async { print "ok 4\n"; my $x = bless \my $dummy, "xyz"; cede; print "not ok 5\n"; }; print "ok 2\n"; cede; print "ok 5\n"; cede; print "ok 9\n"; cede; print "ok 10\n";