… | |
… | |
2294 | for my $signal (qw(INT HUP TERM)) { |
2294 | for my $signal (qw(INT HUP TERM)) { |
2295 | Event->signal ( |
2295 | Event->signal ( |
2296 | reentrant => 0, |
2296 | reentrant => 0, |
2297 | data => WF_AUTOCANCEL, |
2297 | data => WF_AUTOCANCEL, |
2298 | signal => $signal, |
2298 | signal => $signal, |
|
|
2299 | prio => 0, |
2299 | cb => sub { |
2300 | cb => sub { |
2300 | cf::cleanup "SIG$signal"; |
2301 | cf::cleanup "SIG$signal"; |
2301 | }, |
2302 | }, |
2302 | ); |
2303 | ); |
2303 | } |
2304 | } |
… | |
… | |
2478 | my $bug_warning = 0; |
2479 | my $bug_warning = 0; |
2479 | |
2480 | |
2480 | $TICK_WATCHER = Event->timer ( |
2481 | $TICK_WATCHER = Event->timer ( |
2481 | reentrant => 0, |
2482 | reentrant => 0, |
2482 | parked => 1, |
2483 | parked => 1, |
2483 | prio => -1, |
2484 | prio => 0, |
2484 | at => $NEXT_TICK || $TICK, |
2485 | at => $NEXT_TICK || $TICK, |
2485 | data => WF_AUTOCANCEL, |
2486 | data => WF_AUTOCANCEL, |
2486 | cb => sub { |
2487 | cb => sub { |
2487 | if ($Coro::current != $Coro::main) { |
2488 | if ($Coro::current != $Coro::main) { |
2488 | Carp::cluck "major BUG: server tick called outside of main coro, skipping it" |
2489 | Carp::cluck "major BUG: server tick called outside of main coro, skipping it" |
… | |
… | |
2497 | $NEXT_TICK += $TICK; |
2498 | $NEXT_TICK += $TICK; |
2498 | |
2499 | |
2499 | $WAIT_FOR_TICK->broadcast; |
2500 | $WAIT_FOR_TICK->broadcast; |
2500 | $WAIT_FOR_TICK_ONE->send if $WAIT_FOR_TICK_ONE->awaited; |
2501 | $WAIT_FOR_TICK_ONE->send if $WAIT_FOR_TICK_ONE->awaited; |
2501 | |
2502 | |
|
|
2503 | Event::sweep; |
|
|
2504 | Coro::cede_notself; |
|
|
2505 | |
2502 | my $AFTER = Event::time; |
2506 | # my $AFTER = Event::time; |
2503 | warn $AFTER - $NOW;#d# |
2507 | # warn $AFTER - $NOW;#d# |
2504 | |
2508 | |
2505 | # if we are delayed by four ticks or more, skip them all |
2509 | # if we are delayed by four ticks or more, skip them all |
2506 | $NEXT_TICK = Event::time if Event::time >= $NEXT_TICK + $TICK * 4; |
2510 | $NEXT_TICK = Event::time if Event::time >= $NEXT_TICK + $TICK * 4; |
2507 | |
2511 | |
2508 | $TICK_WATCHER->at ($NEXT_TICK); |
2512 | $TICK_WATCHER->at ($NEXT_TICK); |
2509 | $TICK_WATCHER->start; |
2513 | $TICK_WATCHER->start; |
2510 | }, |
2514 | }, |
2511 | ); |
2515 | ); |
2512 | |
2516 | |
2513 | IO::AIO::max_poll_time $TICK * 0.2; |
2517 | IO::AIO::max_poll_time $TICK * 0.1; |
2514 | |
2518 | |
2515 | undef $Coro::AIO::WATCHER; |
2519 | undef $Coro::AIO::WATCHER; |
2516 | $AIO_POLL_WATCHER = Event->io ( |
2520 | $AIO_POLL_WATCHER = Event->io ( |
2517 | reentrant => 0, |
2521 | reentrant => 0, |
2518 | fd => IO::AIO::poll_fileno, |
2522 | fd => IO::AIO::poll_fileno, |