From c4baa2eacb3f758503beea82d75cdba405b17cde Mon Sep 17 00:00:00 2001 From: Andreas Scherbaum Date: Sun, 29 Jan 2012 15:18:19 +0100 Subject: [PATCH] - make sure the watchdog is not called repeatedly in a short time frame --- docbot.pl | 53 ++++++++++++++++++++++++++++++++--------------------- 1 file changed, 32 insertions(+), 21 deletions(-) diff --git a/docbot.pl b/docbot.pl index 602c515..c6c56af 100755 --- a/docbot.pl +++ b/docbot.pl @@ -746,34 +746,45 @@ sub find_irc_session { # none # return: # none -sub watchdog { +BEGIN { + # last time the watchdog was called + # initialize to now() + my $watchdog_last_call = time(); - foreach my $session (keys(%main::sessions)) { - if (defined(read_session_activity($session))) { - if (read_session_activity($session) < (time() - 180) and read_session_activity($session) < (time() - 240)) { - print_msg("Session $session timed out", INFO); - # FIXME: what to do? - # automatic reconnects should be done by a plugin - } else { - my $irc = $main::sessions{$session}{'session'}; - - # validate nickname - my $logged_in = $irc->logged_in(); - my $nick_name = $irc->nick_name(); - if ($logged_in and $main::sessions{$session}{'past_motd'} == 1) { - if ($nick_name ne $main::sessions{$session}{'nickname'}) { - if ($main::sessions{$session}{'last_nick_change_attempt'} < (time() - 35)) { - # the bot is not using the desired nickname, try changing this - print_msg("nickname is: $nick_name, desired nickname is: " . $main::sessions{$session}{'nickname'} . ", issuing nick change", INFO); - $irc->yield( nick => $main::sessions{$session}{'nickname'} ); - $main::sessions{$session}{'last_nick_change_attempt'} = time(); + sub watchdog { + + if ((time() - $watchdog_last_call) < 5) { + # repeated call + return; + } + $watchdog_last_call = time(); + + foreach my $session (keys(%main::sessions)) { + if (defined(read_session_activity($session))) { + if (read_session_activity($session) < (time() - 180) and read_session_activity($session) < (time() - 240)) { + print_msg("Session $session timed out", INFO); + # automatic reconnects should be done by a plugin + } else { + my $irc = $main::sessions{$session}{'session'}; + + # validate nickname + my $logged_in = $irc->logged_in(); + my $nick_name = $irc->nick_name(); + if ($logged_in and $main::sessions{$session}{'past_motd'} == 1) { + if ($nick_name ne $main::sessions{$session}{'nickname'}) { + if ($main::sessions{$session}{'last_nick_change_attempt'} < (time() - 35)) { + # the bot is not using the desired nickname, try changing this + print_msg("nickname is: $nick_name, desired nickname is: " . $main::sessions{$session}{'nickname'} . ", issuing nick change", INFO); + $irc->yield( nick => $main::sessions{$session}{'nickname'} ); + $main::sessions{$session}{'last_nick_change_attempt'} = time(); + } } } } } } - } + } } -- 2.39.5