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

Comparing Coro/Coro.pm (file contents):
Revision 1.310 by root, Mon Oct 8 23:16:15 2012 UTC vs.
Revision 1.311 by root, Fri Nov 30 08:12:37 2012 UTC

1129 my ($rpid, $rstatus) = Coro::rouse_wait; 1129 my ($rpid, $rstatus) = Coro::rouse_wait;
1130 $rstatus 1130 $rstatus
1131 } 1131 }
1132 1132
1133In the case where C<rouse_cb> and C<rouse_wait> are not flexible enough, 1133In the case where C<rouse_cb> and C<rouse_wait> are not flexible enough,
1134you can roll your own, using C<schedule>: 1134you can roll your own, using C<schedule> and C<ready>:
1135 1135
1136 sub wait_for_child($) { 1136 sub wait_for_child($) {
1137 my ($pid) = @_; 1137 my ($pid) = @_;
1138 1138
1139 # store the current coro in $current, 1139 # store the current coro in $current,
1142 my ($done, $rstatus); 1142 my ($done, $rstatus);
1143 1143
1144 # pass a closure to ->child 1144 # pass a closure to ->child
1145 my $watcher = AnyEvent->child (pid => $pid, cb => sub { 1145 my $watcher = AnyEvent->child (pid => $pid, cb => sub {
1146 $rstatus = $_[1]; # remember rstatus 1146 $rstatus = $_[1]; # remember rstatus
1147 $done = 1; # mark $rstatus as valud 1147 $done = 1; # mark $rstatus as valid
1148 $current->ready; # wake up the waiting thread
1148 }); 1149 });
1149 1150
1150 # wait until the closure has been called 1151 # wait until the closure has been called
1151 schedule while !$done; 1152 schedule while !$done;
1152 1153

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines