From 78978a4654ad851b0fa18bcd3d165b9c173f0375 Mon Sep 17 00:00:00 2001 From: Giuseppe Bilotta Date: Wed, 28 Jan 2009 14:51:21 +0100 Subject: ircbot: the reconnect must be protected The reconnect() call in the main loop must be protected in the begin/rescue blocks. Most of the rescue blocks can be fall-through, because the begin/end is wrapped in a loop. The only exception is the ServerError block that issues a retry lest too_fast is reset to false even when it should be true. --- lib/rbot/ircbot.rb | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'lib/rbot') diff --git a/lib/rbot/ircbot.rb b/lib/rbot/ircbot.rb index 0a18f04c..b47c235b 100644 --- a/lib/rbot/ircbot.rb +++ b/lib/rbot/ircbot.rb @@ -905,8 +905,9 @@ class Bot while true too_fast = false begin - quit if $interrupted > 0 quit_msg = nil + reconnect(quit_msg, too_fast) + quit if $interrupted > 0 while @socket.connected? quit if $interrupted > 0 @@ -936,6 +937,7 @@ class Bot # received an ERROR from the server quit_msg = "server ERROR: " + e.message too_fast = e.message.index("reconnect too fast") + retry rescue BDB::Fatal => e fatal "fatal bdb error: #{e.pretty_inspect}" DBTree.stats @@ -951,7 +953,6 @@ class Bot log_session_end exit 2 end - reconnect(quit_msg, too_fast) end end -- cgit v1.2.3