… | |
… | |
241 | my $cb; |
241 | my $cb; |
242 | |
242 | |
243 | while () { |
243 | while () { |
244 | eval { |
244 | eval { |
245 | while () { |
245 | while () { |
246 | $cb = &_pool_1 |
246 | _pool_1 $cb; |
247 | or return; |
|
|
248 | |
|
|
249 | &$cb; |
247 | &$cb; |
250 | |
248 | _pool_2 $cb; |
251 | return if &_pool_2; |
|
|
252 | |
|
|
253 | undef $cb; |
|
|
254 | schedule; |
249 | &schedule; |
255 | } |
250 | } |
256 | }; |
251 | }; |
257 | |
252 | |
|
|
253 | last if $@ eq "\3terminate\2\n"; |
258 | warn $@ if $@; |
254 | warn $@ if $@; |
259 | } |
255 | } |
260 | } |
256 | } |
261 | |
257 | |
262 | sub async_pool(&@) { |
258 | sub async_pool(&@) { |
263 | # this is also inlined into the unlock_scheduler |
259 | # this is also inlined into the unlock_scheduler |
264 | my $coro = (pop @async_pool) || new Coro \&pool_handler;; |
260 | my $coro = (pop @async_pool) || new Coro \&pool_handler; |
265 | |
261 | |
266 | $coro->{_invoke} = [@_]; |
262 | $coro->{_invoke} = [@_]; |
267 | $coro->ready; |
263 | $coro->ready; |
268 | |
264 | |
269 | $coro |
265 | $coro |