diff options
author | shugo <shugo@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2011-08-19 05:18:20 +0000 |
---|---|---|
committer | shugo <shugo@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2011-08-19 05:18:20 +0000 |
commit | f23e93f8b329d985f7ef9efb52a0a7528da0ef3d (patch) | |
tree | 0e10e7bed0bf2d8f016593631b1b798a25b27faa /lib/net | |
parent | 31f92d788c26b7d4bb927fafdc1ccc3d1e4a4008 (diff) |
* backport r33007 from trunk.
* lib/net/imap.rb (idle): raises a Net::IMAP::Error when the
connection is closed. based on the patch by Hugo Barauna.
[Bug #5190] [ruby-core:38930]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_3@33008 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/net')
-rw-r--r-- | lib/net/imap.rb | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/lib/net/imap.rb b/lib/net/imap.rb index 1411313aae..e0815a1892 100644 --- a/lib/net/imap.rb +++ b/lib/net/imap.rb @@ -905,10 +905,15 @@ module Net @idle_done_cond = new_cond @idle_done_cond.wait @idle_done_cond = nil + if @receiver_thread_terminating + raise Net::IMAP::Error, "connection closed" + end ensure - remove_response_handler(response_handler) - put_string("DONE#{CRLF}") - response = get_tagged_response(tag, "IDLE") + unless @receiver_thread_terminating + remove_response_handler(response_handler) + put_string("DONE#{CRLF}") + response = get_tagged_response(tag, "IDLE") + end end end @@ -1056,6 +1061,7 @@ module Net rescue Exception end } + @receiver_thread_terminating = false end def receive_responses @@ -1115,8 +1121,12 @@ module Net end end synchronize do + @receiver_thread_terminating = true @tagged_response_arrival.broadcast @continuation_request_arrival.broadcast + if @idle_done_cond + @idle_done_cond.signal + end end end |