mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
test/net/imap/test_imap.rb (test_exception_during_idle): kill infinite looper
It is possible for Mutex#sleep (via ConditionVariable#wait) to prematurely wake up under MJIT (because Mutex#sleep can't handle spurious wakeups). This affects @idle_done_cond in Net::IMAP#idle and means the response handler may never set `in_idle' to `true`. In any case, ensure the infinite looping `raiser' thread stops running when the test is done. Will work on reducing the effect of spurious wakeups from MJIT... git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@64387 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
6fc7f10309
commit
0783fd9366
1 changed files with 3 additions and 1 deletions
|
@ -231,7 +231,7 @@ class IMAPTest < Test::Unit::TestCase
|
|||
in_idle = false
|
||||
exception_raised = false
|
||||
c = m.new_cond
|
||||
@threads << Thread.start do
|
||||
raiser = Thread.start do
|
||||
m.synchronize do
|
||||
until in_idle
|
||||
c.wait(0.1)
|
||||
|
@ -243,6 +243,7 @@ class IMAPTest < Test::Unit::TestCase
|
|||
c.signal
|
||||
end
|
||||
end
|
||||
@threads << raiser
|
||||
imap.idle do |res|
|
||||
m.synchronize do
|
||||
in_idle = true
|
||||
|
@ -260,6 +261,7 @@ class IMAPTest < Test::Unit::TestCase
|
|||
imap.logout
|
||||
ensure
|
||||
imap.disconnect if imap
|
||||
raiser.kill unless in_idle
|
||||
end
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in a new issue