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
|
in_idle = false
|
||||||
exception_raised = false
|
exception_raised = false
|
||||||
c = m.new_cond
|
c = m.new_cond
|
||||||
@threads << Thread.start do
|
raiser = Thread.start do
|
||||||
m.synchronize do
|
m.synchronize do
|
||||||
until in_idle
|
until in_idle
|
||||||
c.wait(0.1)
|
c.wait(0.1)
|
||||||
|
@ -243,6 +243,7 @@ class IMAPTest < Test::Unit::TestCase
|
||||||
c.signal
|
c.signal
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@threads << raiser
|
||||||
imap.idle do |res|
|
imap.idle do |res|
|
||||||
m.synchronize do
|
m.synchronize do
|
||||||
in_idle = true
|
in_idle = true
|
||||||
|
@ -260,6 +261,7 @@ class IMAPTest < Test::Unit::TestCase
|
||||||
imap.logout
|
imap.logout
|
||||||
ensure
|
ensure
|
||||||
imap.disconnect if imap
|
imap.disconnect if imap
|
||||||
|
raiser.kill unless in_idle
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue