1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* lib/net/imap.rb (receive_responses): raise exception to

client_thread. Thanks to William Webber.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@4310 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
shugo 2003-08-04 01:02:16 +00:00
parent 79c0605534
commit 594eb2e0fe
2 changed files with 38 additions and 17 deletions

View file

@ -1,3 +1,8 @@
Mon Aug 4 10:00:47 2003 Shugo Maeda <shugo@ruby-lang.org>
* lib/net/imap.rb (receive_responses): raise exception to
client_thread. Thanks to William Webber.
Mon Aug 4 09:22:53 2003 William Webber <wew@williamwebber.com>
* lib/net/imap.rb: convert RD to RDoc.

View file

@ -206,6 +206,9 @@ module Net
# Returns all response handlers.
attr_reader :response_handlers
# The thread to receive exceptions.
attr_accessor :client_thread
# Flag indicating a message has been seen
SEEN = :Seen
@ -841,29 +844,42 @@ module Net
raise ByeResponseError, resp[0]
end
@client_thread = Thread.current
@receiver_thread = Thread.start {
receive_responses
}
end
def receive_responses
while resp = get_response
synchronize do
case resp
when TaggedResponse
@tagged_responses[resp.tag] = resp
@tag_arrival.broadcast
when UntaggedResponse
record_response(resp.name, resp.data)
if resp.data.instance_of?(ResponseText) &&
(code = resp.data.code)
record_response(code.name, code.data)
end
end
@response_handlers.each do |handler|
handler.call(resp)
end
end
while true
begin
resp = get_response
rescue Exception
@sock.close
@client_thread.raise($!)
break
end
break unless resp
begin
synchronize do
case resp
when TaggedResponse
@tagged_responses[resp.tag] = resp
@tag_arrival.broadcast
when UntaggedResponse
record_response(resp.name, resp.data)
if resp.data.instance_of?(ResponseText) &&
(code = resp.data.code)
record_response(code.name, code.data)
end
end
@response_handlers.each do |handler|
handler.call(resp)
end
end
rescue Exception
@client_thread.raise($!)
end
end
end