… | |
… | |
50 | |
50 | |
51 | our $idle; # idle handler |
51 | our $idle; # idle handler |
52 | our $main; # main coroutine |
52 | our $main; # main coroutine |
53 | our $current; # current coroutine |
53 | our $current; # current coroutine |
54 | |
54 | |
55 | our $VERSION = '3.3'; |
55 | our $VERSION = '3.41'; |
56 | |
56 | |
57 | our @EXPORT = qw(async async_pool cede schedule terminate current unblock_sub); |
57 | our @EXPORT = qw(async async_pool cede schedule terminate current unblock_sub); |
58 | our %EXPORT_TAGS = ( |
58 | our %EXPORT_TAGS = ( |
59 | prio => [qw(PRIO_MAX PRIO_HIGH PRIO_NORMAL PRIO_LOW PRIO_IDLE PRIO_MIN)], |
59 | prio => [qw(PRIO_MAX PRIO_HIGH PRIO_NORMAL PRIO_LOW PRIO_IDLE PRIO_MIN)], |
60 | ); |
60 | ); |
… | |
… | |
233 | our $POOL_SIZE = 8; |
233 | our $POOL_SIZE = 8; |
234 | our @pool; |
234 | our @pool; |
235 | |
235 | |
236 | sub pool_handler { |
236 | sub pool_handler { |
237 | while () { |
237 | while () { |
238 | my ($cb, @arg) = @{ delete $current->{_invoke} }; |
|
|
239 | |
|
|
240 | eval { |
238 | eval { |
|
|
239 | my ($cb, @arg) = @{ delete $current->{_invoke} or return }; |
241 | $cb->(@arg); |
240 | $cb->(@arg); |
242 | }; |
241 | }; |
243 | warn $@ if $@; |
242 | warn $@ if $@; |
244 | |
243 | |
245 | last if @pool >= $POOL_SIZE; |
244 | last if @pool >= $POOL_SIZE; |