diff options
Diffstat (limited to 'spec/ruby/core/mutex/unlock_spec.rb')
-rw-r--r-- | spec/ruby/core/mutex/unlock_spec.rb | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/spec/ruby/core/mutex/unlock_spec.rb b/spec/ruby/core/mutex/unlock_spec.rb new file mode 100644 index 0000000000..4601fde634 --- /dev/null +++ b/spec/ruby/core/mutex/unlock_spec.rb @@ -0,0 +1,38 @@ +require File.expand_path('../../../spec_helper', __FILE__) + +describe "Mutex#unlock" do + it "raises ThreadError unless Mutex is locked" do + mutex = Mutex.new + lambda { mutex.unlock }.should raise_error(ThreadError) + end + + it "raises ThreadError unless thread owns Mutex" do + mutex = Mutex.new + wait = Mutex.new + wait.lock + th = Thread.new do + mutex.lock + wait.lock + end + + # avoid race on mutex.lock + Thread.pass until mutex.locked? + Thread.pass while th.status and th.status != "sleep" + + lambda { mutex.unlock }.should raise_error(ThreadError) + + wait.unlock + th.join + end + + it "raises ThreadError if previously locking thread is gone" do + mutex = Mutex.new + th = Thread.new do + mutex.lock + end + + th.join + + lambda { mutex.unlock }.should raise_error(ThreadError) + end +end |