AnyEvent-Callback

 view release on metacpan or  search on metacpan

lib/AnyEvent/Callback.pm  view on Meta::CPAN

232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
sub DESTROY {
    my ($self) = @_;
    return if $self->{called} or $self->{ecalled};
    $self->error("no one touched registered callback");
    delete $self->{cb};
    delete $self->{ecb};
}
 
 
use Scalar::Util 'weaken';
use Carp;
 
sub new {
    my ($class) = @_;
    return bless { stack => [], done => 0 } => ref($class) || $class;
}
 
sub cb {
    my ($self) = @_;
    my $idx = @{ $self->{stack} };

lib/AnyEvent/Callback.pm  view on Meta::CPAN

256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
            $self->{done}++;
            $self->_check_if_done;
        },
        sub {
            $self->{stack}[$idx] = AnyEvent::Callback::Stack::Result->err(@_);
            $self->{done}++;
            $self->_check_if_done;
        }
    ;
    push @{ $self->{stack} } => $cb;
    weaken $self->{stack}[$idx];
    return $self->{stack}[$idx];
}
 
 
sub _check_if_done {
    my ($self) = @_;
    return unless $self->{waiter};
    return unless $self->{done} >= @{ $self->{stack} };
    my $cb = delete $self->{waiter};
    $cb->(@{ $self->{stack} });



( run in 0.243 second using v1.01-cache-2.11-cpan-94b05bcf43c )