--- deliantra/server/ext/schmorplog.ext 2012/02/04 00:43:39 1.33 +++ deliantra/server/ext/schmorplog.ext 2012/02/04 01:12:33 1.34 @@ -221,6 +221,7 @@ # export recentlog our %RECENT; +our $EXPORT_RECENTLOG_GRACE = 120; our $update_w; our %need_update; @@ -244,12 +245,12 @@ my $client = /^schmorplog_client (.*)$/m ? $1 : "?"; my $map = /^map (.*)$/m ? $1 : "?"; - return unless $last_login; + return delete $RECENT{$login} unless $last_login; $last_logout = $last_save if $last_save > $last_logout && $last_login > $last_logout && $last_save < $NOW - 10 * 60; $last_logout = undef if $last_logout < $last_login; - return unless $last_login > $NOW - 86400 * ($login_count * 7 + 10); + return delete $RECENT{$login} unless $last_login > $NOW - 86400 * ($login_count * 7 + 10); # next if $count < 3 && $login < $NOW - 86400*2; $RECENT{$login} = [$login, $birthdate, $last_login, $login_count, $last_logout, $client, $death_count, $map]; @@ -261,21 +262,17 @@ $Coro::current->nice (1); $Coro::current->{desc} = "recentlog updater"; - Coro::AnyEvent::sleep 5; # grace time to allow file-saves - my $lock = cf::lock_acquire "export_recentlog"; - my $t0 = EV::now; + my @logins = keys %need_update; %need_update = (); + undef $update_w; - while (%need_update) { - for (keys %need_update) { - delete $need_update{$_}; - - _update_login $_; - } - } + Coro::AnyEvent::sleep $EXPORT_RECENTLOG_GRACE; # grace time to allow file-saves - undef $update_w; + my $t0 = EV::now; + + _update_login $_ + for @logins; cf::get_slot 0.1, 0, "recentlog serialise"; @@ -297,7 +294,7 @@ sub update { return unless defined $EXPORT_RECENTLOG; - $update_w ||= AE::timer $EXPORT_RECENTLOG_INTERVAL, 0, \&_update; + $update_w ||= AE::timer $EXPORT_RECENTLOG_INTERVAL - $EXPORT_RECENTLOG_GRACE, 0, \&_update; } sub reload { @@ -323,7 +320,7 @@ on_birth => sub { undef $need_update{$_[0]->ob->name}; update }, on_death => sub { undef $need_update{$_[0]->ob->name}; update }, # on_load => sub { undef $need_update{$_[0]->ob->name}; update }, -# on_save => sub { undef $need_update{$_[0]->ob->name}; update }, + on_save => sub { undef $need_update{$_[0]->ob->name}; update }, ); cf::post_init {