--- deliantra/server/ext/map-scheduler.ext 2007/09/19 21:56:30 1.42 +++ deliantra/server/ext/map-scheduler.ext 2007/11/14 08:09:46 1.46 @@ -6,13 +6,13 @@ #our $DEACTIVATE_TIMEOUT = 20; # number of seconds after which maps get deactivated to save cpu our $SWAP_TIMEOUT = $cf::CFG{swap_timeout} || 300; # number of seconds after which inactive maps get swapped out -our $SCHEDULE_INTERVAL = $cf::CFG{schedule_interval} || .8; # time the map scheduler sleeps between runs +our $SCHEDULE_INTERVAL = $cf::CFG{schedule_interval} || 2; # time the map scheduler sleeps between runs our $SAVE_TIMEOUT = $cf::CFG{save_timeout} || 30; # save maps every n seconds our $SWAP_LOAD1 = $cf::CFG{swap_load1} || .1; # start aggressively swapping at this load our $SWAP_LOAD2 = $cf::CFG{swap_load2} || .4; # swap as fast as possible at this load cf::async_ext { - $Coro::current->{desc} = "initial map scanner"; + $Coro::current->{desc} = "startup map scanner"; $Coro::current->prio (Coro::PRIO_MIN); # load the header of swapped-out maps. @@ -54,11 +54,15 @@ our $SCHEDULER = cf::async_ext { $Coro::current->{desc} = "map scheduler"; - my $timer = Coro::Event->timer (after => 1); + $Coro::current->prio (Coro::PRIO_MAX); while () { - $timer->interval ($SCHEDULE_INTERVAL); - $timer->next unless $cf::LOADAVG > $SWAP_LOAD2; + if ($cf::LOADAVG > $SWAP_LOAD2) { + Coro::EV::timer_once 0.05; + cf::wait_for_tick; + } else { + Coro::EV::timer_once $SCHEDULE_INTERVAL; + } # this weird form of iteration over values is used because # the hash changes underneath us frequently, and for