AnyEvent-Callback
view release on metacpan or search on metacpan
lib/AnyEvent/Callback.pm view on Meta::CPAN
232233234235236237238239240241242243244245246247248249250251252sub
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
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
256257258259260261262263264265266267268269270271272273274275276
$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 )