diff options
author | eregon <eregon@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2018-08-18 13:52:53 +0000 |
---|---|---|
committer | eregon <eregon@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2018-08-18 13:52:53 +0000 |
commit | c742050ea5fd30108f913383c0fafc4614adb04c (patch) | |
tree | af2da0e27cf305ea29d12ae9636977a4e07d25d6 /spec/ruby | |
parent | b5b5b28c650fc51cba7c06b48501de84c0ef9523 (diff) |
Revert r64441
* This reverts commit 647fc1227a4146ecbfeb0d59358abc8d99cd8ae6:
"thread_sync.c (rb_mutex_synchronize): only unlock if we own the mutex"
* Let's try to preserve the semantics of always being locked inside
Mutex#synchronize, even if an exception interrupts ConditionVariable#wait.
* As discussed on [Bug #14999].
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@64448 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'spec/ruby')
-rw-r--r-- | spec/ruby/library/conditionvariable/wait_spec.rb | 26 |
1 files changed, 18 insertions, 8 deletions
diff --git a/spec/ruby/library/conditionvariable/wait_spec.rb b/spec/ruby/library/conditionvariable/wait_spec.rb index 99e14efe35..d4950a7b27 100644 --- a/spec/ruby/library/conditionvariable/wait_spec.rb +++ b/spec/ruby/library/conditionvariable/wait_spec.rb @@ -23,15 +23,21 @@ describe "ConditionVariable#wait" do th.join end - it "the lock remains usable even if the thread is killed" do + it "reacquires the lock even if the thread is killed" do m = Mutex.new cv = ConditionVariable.new in_synchronize = false + owned = nil th = Thread.new do m.synchronize do in_synchronize = true - cv.wait(m) + begin + cv.wait(m) + ensure + owned = m.owned? + $stderr.puts "\nThe Thread doesn't own the Mutex!" unless owned + end end end @@ -43,19 +49,24 @@ describe "ConditionVariable#wait" do th.kill th.join - m.try_lock.should == true - m.unlock + owned.should == true end - it "lock remains usable even if the thread is killed after being signaled" do + it "reacquires the lock even if the thread is killed after being signaled" do m = Mutex.new cv = ConditionVariable.new in_synchronize = false + owned = nil th = Thread.new do m.synchronize do in_synchronize = true - cv.wait(m) + begin + cv.wait(m) + ensure + owned = m.owned? + $stderr.puts "\nThe Thread doesn't own the Mutex!" unless owned + end end end @@ -73,8 +84,7 @@ describe "ConditionVariable#wait" do } th.join - m.try_lock.should == true - m.unlock + owned.should == true end it "supports multiple Threads waiting on the same ConditionVariable and Mutex" do |