ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/AnyEvent-MP/MP/Node.pm
(Generate patch)

Comparing AnyEvent-MP/MP/Node.pm (file contents):
Revision 1.41 by root, Fri Sep 11 02:32:23 2009 UTC vs.
Revision 1.44 by root, Fri Oct 2 20:40:10 2009 UTC

208sub connect { 208sub connect {
209 # we are trivially connected 209 # we are trivially connected
210} 210}
211 211
212# delay every so often to avoid recursion, also used to delay after spawn 212# delay every so often to avoid recursion, also used to delay after spawn
213our $DELAY; 213our $DELAY = -50;
214our @DELAY; 214our @DELAY;
215our $DELAY_W; 215our $DELAY_W;
216 216
217sub _send_delayed { 217sub _send_delayed {
218 local $AnyEvent::MP::Kernel::SRCNODE = $AnyEvent::MP::Kernel::NODE{""}; 218 local $AnyEvent::MP::Kernel::SRCNODE = $AnyEvent::MP::Kernel::NODE{""};
248 248
249sub kill { 249sub kill {
250 my ($self, $port, @reason) = @_; 250 my ($self, $port, @reason) = @_;
251 251
252 my $delay_cb = sub { 252 my $delay_cb = sub {
253 delete $AnyEvent::MP::Kernel::PORT{$port}; 253 delete $AnyEvent::MP::Kernel::PORT{$port}
254 or return; # killing nonexistent ports is O.K.
254 delete $AnyEvent::MP::Kernel::PORT_DATA{$port}; 255 delete $AnyEvent::MP::Kernel::PORT_DATA{$port};
255 256
256 my $mon = delete $AnyEvent::MP::Kernel::LMON{$port} 257 my $mon = delete $AnyEvent::MP::Kernel::LMON{$port}
257 or !@reason 258 or !@reason
258 or $AnyEvent::MP::Kernel::WARN->(8, "unmonitored local port $port died with reason: @reason"); 259 or $AnyEvent::MP::Kernel::WARN->(8, "unmonitored local port $port died with reason: @reason");
259 260
260 $_->(@reason) for values %$mon; 261 $_->(@reason) for values %$mon;
261 }; 262 };
262 263
263 $DELAY_W ? push @DELAY, $delay_cb : &$delay_cb; 264 # we _always_ delay kil's, to avoid calling mon callbacks
265 # from anything but the event loop context.
266 $DELAY = 1;
267 push @DELAY, $delay_cb;
264} 268}
265 269
266sub monitor { 270sub monitor {
267 my ($self, $portid, $cb) = @_; 271 my ($self, $portid, $cb) = @_;
268 272

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines