--- AnyEvent-FCP/FCP.pm 2015/08/04 00:35:16 1.9 +++ AnyEvent-FCP/FCP.pm 2015/08/04 00:50:25 1.10 @@ -188,7 +188,6 @@ sub _push_queue { my ($self, $queue) = @_; - warn "oush @$queue\n";#d# shift @$queue; $queue->[0]($self, AnyEvent::Util::guard { $self->_push_queue ($queue) }) if @$queue; @@ -217,7 +216,7 @@ my $on = $self->{on}; for (0 .. $#$on) { - unless (my $res = $on->[$_]($type, \%kv, $rdata)) { + unless (my $res = $on->[$_]($self, $type, \%kv, $rdata)) { splice @$on, $_, 1 unless defined $res; return; } @@ -370,34 +369,41 @@ _txn list_persistent_requests => sub { my ($self, $cv) = @_; - my %res; + $self->serialise (list_persistent_requests => sub { + my ($self, $guard) = @_; - $self->send_msg ("list_persistent_requests"); + my %res; - push @{ $self->{queue} }, sub { - my ($self, $type, $kv, $rdata) = @_; + $self->send_msg ("list_persistent_requests"); - if ($type eq "end_list_persistent_requests") { - $cv->(\%res); - 1 - } else { - my $id = $kv->{identifier}; + $self->on (sub { + my ($self, $type, $kv, $rdata) = @_; + + $guard if 0; - if ($type =~ /^persistent_(get|put|put_dir)$/) { - $res{$id} = { - type => $1, - %{ $res{$id} }, - %$kv, - }; - } elsif ($type eq "simple_progress") { - delete $kv->{pkt_type}; # save memory - push @{ $res{delete $kv->{identifier}}{simple_progress} }, $kv; + if ($type eq "end_list_persistent_requests") { + $cv->(\%res); + return; } else { - $res{delete $kv->{identifier}}{delete $kv->{pkt_type}} = $kv; + my $id = $kv->{identifier}; + + if ($type =~ /^persistent_(get|put|put_dir)$/) { + $res{$id} = { + type => $1, + %{ $res{$id} }, + %$kv, + }; + } elsif ($type eq "simple_progress") { + delete $kv->{pkt_type}; # save memory + push @{ $res{delete $kv->{identifier}}{simple_progress} }, $kv; + } else { + $res{delete $kv->{identifier}}{delete $kv->{pkt_type}} = $kv; + } } - 0 - } - }; + + 1 + }); + }); }; =item $cv = $fcp->remove_request ($global, $identifier) @@ -518,7 +524,7 @@ want_write_directory => $want_write ? "true" : "false", ); $self->on (sub { - my ($type, $kv) = @_; + my ($self, $type, $kv) = @_; if ($type eq "test_dda_reply") { # the filenames are all relative to the server-side directory, @@ -554,7 +560,7 @@ $self->send_msg (test_dda_response => %response); $self->on (sub { - my ($type, $kv) = @_; + my ($self, $type, $kv) = @_; $guard if 0; # reference