ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/lib/cf.pm
(Generate patch)

Comparing deliantra/server/lib/cf.pm (file contents):
Revision 1.188 by root, Sat Jan 20 23:30:16 2007 UTC vs.
Revision 1.189 by root, Sun Jan 21 21:28:27 2007 UTC

1496 delete $MAP_PREFETCH{$path}; 1496 delete $MAP_PREFETCH{$path};
1497 } 1497 }
1498 } 1498 }
1499 undef $MAP_PREFETCHER; 1499 undef $MAP_PREFETCHER;
1500 }; 1500 };
1501 $MAP_PREFETCHER->prio (6);
1501 1502
1502 () 1503 ()
1503} 1504}
1504 1505
1505sub save { 1506sub save {
2205 sub db_sync() { 2206 sub db_sync() {
2206 db_save if $dirty; 2207 db_save if $dirty;
2207 undef $dirty; 2208 undef $dirty;
2208 } 2209 }
2209 2210
2210 my $idle = Event->idle (min => 10, max => 20, repeat => 0, data => WF_AUTOCANCEL, cb => sub { 2211 my $idle = Event->idle (
2211 db_sync; 2212 reentrant => 0,
2213 min => 10,
2214 max => 20,
2215 repeat => 0,
2216 data => WF_AUTOCANCEL,
2217 cb => \&db_sync,
2212 }); 2218 );
2213 2219
2214 sub db_dirty() { 2220 sub db_dirty() {
2215 $dirty = 1; 2221 $dirty = 1;
2216 $idle->start; 2222 $idle->start;
2217 } 2223 }
2285 2291
2286# install some emergency cleanup handlers 2292# install some emergency cleanup handlers
2287BEGIN { 2293BEGIN {
2288 for my $signal (qw(INT HUP TERM)) { 2294 for my $signal (qw(INT HUP TERM)) {
2289 Event->signal ( 2295 Event->signal (
2296 reentrant => 0,
2290 data => WF_AUTOCANCEL, 2297 data => WF_AUTOCANCEL,
2291 signal => $signal, 2298 signal => $signal,
2292 cb => sub { 2299 cb => sub {
2293 cf::cleanup "SIG$signal"; 2300 cf::cleanup "SIG$signal";
2294 }, 2301 },
2295 ); 2302 );
2296 } 2303 }
2297} 2304}
2452 $who->message ("reloading server."); 2459 $who->message ("reloading server.");
2453 2460
2454 # doing reload synchronously and two reloads happen back-to-back, 2461 # doing reload synchronously and two reloads happen back-to-back,
2455 # coro crashes during coro_state_free->destroy here. 2462 # coro crashes during coro_state_free->destroy here.
2456 2463
2457 $RELOAD_WATCHER ||= Event->timer (after => 0, data => WF_AUTOCANCEL, cb => sub { 2464 $RELOAD_WATCHER ||= Event->timer (
2465 reentrant => 0,
2466 after => 0,
2467 data => WF_AUTOCANCEL,
2468 cb => sub {
2458 reload; 2469 reload;
2459 undef $RELOAD_WATCHER; 2470 undef $RELOAD_WATCHER;
2471 },
2460 }); 2472 );
2461 } 2473 }
2462}; 2474};
2463 2475
2464unshift @INC, $LIBDIR; 2476unshift @INC, $LIBDIR;
2465 2477
2495 }, 2507 },
2496); 2508);
2497 2509
2498IO::AIO::max_poll_time $TICK * 0.2; 2510IO::AIO::max_poll_time $TICK * 0.2;
2499 2511
2512undef $Coro::AIO::WATCHER;
2500$AIO_POLL_WATCHER = Event->io ( 2513$AIO_POLL_WATCHER = Event->io (
2514 reentrant => 0,
2501 fd => IO::AIO::poll_fileno, 2515 fd => IO::AIO::poll_fileno,
2502 poll => 'r', 2516 poll => 'r',
2503 prio => 5, 2517 prio => 6,
2504 data => WF_AUTOCANCEL, 2518 data => WF_AUTOCANCEL,
2505 cb => \&IO::AIO::poll_cb, 2519 cb => \&IO::AIO::poll_cb,
2506); 2520);
2507 2521
2508$WRITE_RUNTIME_WATCHER = Event->timer ( 2522$WRITE_RUNTIME_WATCHER = Event->timer (
2523 reentrant => 0,
2509 data => WF_AUTOCANCEL, 2524 data => WF_AUTOCANCEL,
2510 after => 1, 2525 after => 1,
2511 interval => 10, 2526 interval => 10,
2512 prio => 6, # keep it lowest so it acts like a watchdog 2527 prio => 6, # keep it lowest so it acts like a watchdog
2513 cb => Coro::unblock_sub { 2528 cb => Coro::unblock_sub {
2514 write_runtime 2529 write_runtime
2515 or warn "ERROR: unable to write runtime file: $!"; 2530 or warn "ERROR: unable to write runtime file: $!";
2516 }, 2531 },
2517); 2532);
2518 2533

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines