… | |
… | |
554 | $NODE{""}->unmonitor ($portid, delete $node->{rmon}{$portid}); |
554 | $NODE{""}->unmonitor ($portid, delete $node->{rmon}{$portid}); |
555 | }, |
555 | }, |
556 | mon1 => sub { # start monitoring a port |
556 | mon1 => sub { # start monitoring a port |
557 | my $portid = shift; |
557 | my $portid = shift; |
558 | my $node = $SRCNODE; |
558 | my $node = $SRCNODE; |
559 | Scalar::Util::weaken $node; #TODO# ugly |
559 | Scalar::Util::weaken $node; |
560 | $NODE{""}->monitor ($portid, $node->{rmon}{$portid} = sub { |
560 | $NODE{""}->monitor ($portid, $node->{rmon}{$portid} = sub { |
561 | delete $node->{rmon}{$portid}; |
561 | delete $node->{rmon}{$portid}; |
562 | $node->send (["", kil => $portid, @_]) |
562 | $node->send (["", kil => $portid, @_]) |
563 | if $node && $node->{transport}; #TODO# ugly, should use snd and remove-on-disconnect |
563 | if $node && $node->{transport}; |
564 | }); |
564 | }); |
565 | }, |
565 | }, |
566 | kil => sub { |
566 | kil => sub { |
567 | my $cbs = delete $SRCNODE->{lmon}{+shift} |
567 | my $cbs = delete $SRCNODE->{lmon}{+shift} |
568 | or return; |
568 | or return; |