summaryrefslogtreecommitdiff
path: root/spec/ruby
diff options
context:
space:
mode:
authoreregon <eregon@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-08-18 13:52:53 +0000
committereregon <eregon@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-08-18 13:52:53 +0000
commitc742050ea5fd30108f913383c0fafc4614adb04c (patch)
treeaf2da0e27cf305ea29d12ae9636977a4e07d25d6 /spec/ruby
parentb5b5b28c650fc51cba7c06b48501de84c0ef9523 (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.rb26
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