… | |
… | |
76 | my $release = pop; |
76 | my $release = pop; |
77 | my ($host, $port, @args) = @_; |
77 | my ($host, $port, @args) = @_; |
78 | |
78 | |
79 | my $state; |
79 | my $state; |
80 | |
80 | |
81 | $state = AnyEvent::Socket::tcp_connect $host, $port, sub { |
81 | $state = AnyEvent::Socket::tcp_connect $host, $port, my$x=sub { |
82 | my ($fh, $nhost, $nport) = @_; |
82 | my ($fh, $nhost, $nport) = @_; |
83 | |
83 | |
84 | return $release->() unless $fh; |
84 | return $release->() unless $fh; |
85 | |
85 | |
86 | $state = new AnyEvent::MP::Transport |
86 | $state = new AnyEvent::MP::Transport |
… | |
… | |
313 | $self->send ($_) |
313 | $self->send ($_) |
314 | for @$queue; |
314 | for @$queue; |
315 | |
315 | |
316 | # receive handling |
316 | # receive handling |
317 | my $src_node = $self->{node}; |
317 | my $src_node = $self->{node}; |
318 | Scalar::Util::weaken $src_node; |
|
|
319 | |
|
|
320 | my $rmsg; $rmsg = sub { |
318 | my $rmsg; $rmsg = $self->{rmsg} = sub { |
321 | $_[0]->push_read ($r_framing => $rmsg); |
319 | $_[0]->push_read ($r_framing => $rmsg); |
322 | |
320 | |
323 | local $AnyEvent::MP::Kernel::SRCNODE = $src_node; |
321 | local $AnyEvent::MP::Kernel::SRCNODE = $src_node; |
324 | AnyEvent::MP::Kernel::_inject (@{ $_[1] }); |
322 | AnyEvent::MP::Kernel::_inject (@{ $_[1] }); |
325 | }; |
323 | }; |
326 | $hdl->push_read ($r_framing => $rmsg); |
324 | $hdl->push_read ($r_framing => $rmsg); |
|
|
325 | |
|
|
326 | Scalar::Util::weaken $rmsg; |
|
|
327 | Scalar::Util::weaken $src_node; |
327 | }); |
328 | }); |
328 | }); |
329 | }); |
329 | }); |
330 | }); |
330 | } |
331 | } |
331 | |
332 | |