--- deliantra/server/lib/cf.pm 2007/01/20 23:30:16 1.188 +++ deliantra/server/lib/cf.pm 2007/01/21 21:28:27 1.189 @@ -1498,6 +1498,7 @@ } undef $MAP_PREFETCHER; }; + $MAP_PREFETCHER->prio (6); () } @@ -2207,9 +2208,14 @@ undef $dirty; } - my $idle = Event->idle (min => 10, max => 20, repeat => 0, data => WF_AUTOCANCEL, cb => sub { - db_sync; - }); + my $idle = Event->idle ( + reentrant => 0, + min => 10, + max => 20, + repeat => 0, + data => WF_AUTOCANCEL, + cb => \&db_sync, + ); sub db_dirty() { $dirty = 1; @@ -2287,9 +2293,10 @@ BEGIN { for my $signal (qw(INT HUP TERM)) { Event->signal ( - data => WF_AUTOCANCEL, - signal => $signal, - cb => sub { + reentrant => 0, + data => WF_AUTOCANCEL, + signal => $signal, + cb => sub { cf::cleanup "SIG$signal"; }, ); @@ -2454,10 +2461,15 @@ # doing reload synchronously and two reloads happen back-to-back, # coro crashes during coro_state_free->destroy here. - $RELOAD_WATCHER ||= Event->timer (after => 0, data => WF_AUTOCANCEL, cb => sub { - reload; - undef $RELOAD_WATCHER; - }); + $RELOAD_WATCHER ||= Event->timer ( + reentrant => 0, + after => 0, + data => WF_AUTOCANCEL, + cb => sub { + reload; + undef $RELOAD_WATCHER; + }, + ); } }; @@ -2497,20 +2509,23 @@ IO::AIO::max_poll_time $TICK * 0.2; +undef $Coro::AIO::WATCHER; $AIO_POLL_WATCHER = Event->io ( - fd => IO::AIO::poll_fileno, - poll => 'r', - prio => 5, - data => WF_AUTOCANCEL, - cb => \&IO::AIO::poll_cb, + reentrant => 0, + fd => IO::AIO::poll_fileno, + poll => 'r', + prio => 6, + data => WF_AUTOCANCEL, + cb => \&IO::AIO::poll_cb, ); $WRITE_RUNTIME_WATCHER = Event->timer ( - data => WF_AUTOCANCEL, - after => 1, - interval => 10, - prio => 6, # keep it lowest so it acts like a watchdog - cb => Coro::unblock_sub { + reentrant => 0, + data => WF_AUTOCANCEL, + after => 1, + interval => 10, + prio => 6, # keep it lowest so it acts like a watchdog + cb => Coro::unblock_sub { write_runtime or warn "ERROR: unable to write runtime file: $!"; },