AnyEvent-Callback
view release on metacpan or search on metacpan
lib/AnyEvent/Callback.pm view on Meta::CPAN
sub DESTROY {
my ($self) = @_;
return if $self->{called} or $self->{ecalled};
$self->error("no one touched registered callback");
delete $self->{cb};
delete $self->{ecb};
}
package AnyEvent::Callback::Stack;
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
$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 1.263 second using v1.01-cache-2.11-cpan-94b05bcf43c )