summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorshugo <shugo@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2010-05-08 23:25:54 +0000
committershugo <shugo@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2010-05-08 23:25:54 +0000
commite240f93f2174d80040d381ef889fcefb48e8378e (patch)
treed551e73633e74f1aa9f8de62cfa9ba3756789be5 /lib
parent81f4dba3850f108dbd1c9aad5f175a8e9fbfe5f4 (diff)
* lib/net/imap.rb (disconnect): terminates @receiver_thread even if
@sock.shutdown raises an exception. [ruby-dev:34881] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@27690 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib')
-rw-r--r--lib/net/imap.rb8
1 files changed, 7 insertions, 1 deletions
diff --git a/lib/net/imap.rb b/lib/net/imap.rb
index 46e8f201a1..0f6a4372d5 100644
--- a/lib/net/imap.rb
+++ b/lib/net/imap.rb
@@ -307,9 +307,12 @@ module Net
end
rescue Errno::ENOTCONN
# ignore `Errno::ENOTCONN: Socket is not connected' on some platforms.
+ rescue Exception => e
+ @receiver_thread.raise(e)
end
@receiver_thread.join
@sock.close
+ raise e if e
end
# Returns true if disconnected from the server.
@@ -1012,7 +1015,10 @@ module Net
@client_thread = Thread.current
@receiver_thread = Thread.start {
- receive_responses
+ begin
+ receive_responses
+ rescue Exception
+ end
}
end