diff --git a/connector/perl/lib/MR/IProto.pm b/connector/perl/lib/MR/IProto.pm index 058e9be7f5f728070b5cf637a5cfa375dd0995f3..6a410e24a523011ef85e9dd9cfe4caa0784befaa 100644 --- a/connector/perl/lib/MR/IProto.pm +++ b/connector/perl/lib/MR/IProto.pm @@ -288,15 +288,17 @@ sub send_bulk { die "Method must be called in void context if you want to use async" if defined wantarray; my $cv = AnyEvent->condvar(); $cv->begin( sub { $callback->(\@result) } ); + my $i = 0; foreach my $message ( @$messages ) { + my $idx = $i; $cv->begin(); $self->_send($message, sub { my ($data, $error) = @_; - push @result, blessed($data) ? $data - : { data => $data, error => $error }; + $result[$idx] = blessed($data) ? $data : { data => $data, error => $error }; $cv->end(); return; }); + ++$i; } $cv->end(); return; @@ -306,13 +308,15 @@ sub send_bulk { my $olddie = ref $SIG{__DIE__} eq 'CODE' ? $SIG{__DIE__} : ref $SIG{__DIE__} eq 'GLOB' ? *{$SIG{__DIE__}}{CODE} : undef; local $SIG{__DIE__} = sub { local $! = 0; $olddie->(@_); } if $olddie; my %servers; + my $i = 0; foreach my $message ( @$messages ) { + my $idx = $i; $self->_send_now($message, sub { my ($data, $error) = @_; - push @result, blessed($data) ? $data - : { data => $data, error => $error }; + $result[$idx] = blessed($data) ? $data : { data => $data, error => $error }; return; }, \%servers); + ++$i; } $self->_recv_now(\%servers); return \@result;