The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
$|=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";