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 )