--- deliantra/server/ext/map-random.ext 2009/11/09 03:08:55 1.37 +++ deliantra/server/ext/map-random.ext 2010/03/26 00:26:48 1.38 @@ -56,27 +56,6 @@ 1 } -sub clean_random_maps { - my $files = Coro::AIO::aio_readdirx $cf::RANDOMDIR, IO::AIO::READDIR_STAT_ORDER - or return; - - my $META_TIMEOUT = $cf::CFG{map_random_meta_timeout} || 86400 * 7; - - for my $file (@$files) { - next unless $file =~ /\.meta$/; - - Coro::AIO::aio_stat "$cf::RANDOMDIR/$file" - and next; - - my $age = $cf::NOW - (stat _)[8]; - - if ($age > $META_TIMEOUT) { - warn "resetting random meta data for $file"; - IO::AIO::aio_unlink "$cf::RANDOMDIR/$file"; - } - } -} - # called by the random map generator sub find_style_; sub find_style_($$) { @@ -140,9 +119,34 @@ $map } -# clean up old temp maps regularly -our $CLEAN_RANDOM_MAPS = cf::periodic 3600, Coro::unblock_sub { - clean_random_maps; +cf::async_ext { + $Coro::current->{desc} = "random map meta file cleaner"; + $Coro::current->nice (1); + + while () { + my $META_TIMEOUT = $cf::CFG{map_random_meta_timeout} || 86400 * 7; + + Coro::AnyEvent::idle_upto $META_TIMEOUT / 10 * 2; + + my ($files) = Coro::AIO::aio_readdirx $cf::RANDOMDIR, IO::AIO::READDIR_STAT_ORDER + or return; + + for my $file (@$files) { + next unless $file =~ /\.meta$/; + + Coro::AIO::aio_stat "$cf::RANDOMDIR/$file" + and next; + + my $age = $cf::NOW - (stat _)[8]; + + if ($age > $META_TIMEOUT) { + warn "resetting random meta data for $file"; + IO::AIO::aio_unlink "$cf::RANDOMDIR/$file"; + } + } + + Coro::AnyEvent::sleep $META_TIMEOUT / 10; + } }; # map generator stresstest, NEVER enable under normal circumstances