summaryrefslogtreecommitdiff
path: root/spec/ruby/library/monitor/synchronize_spec.rb
diff options
context:
space:
mode:
authorBenoit Daloze <eregontp@gmail.com>2021-07-29 22:11:21 +0200
committerBenoit Daloze <eregontp@gmail.com>2021-07-29 22:11:21 +0200
commit6998d758248d778fa95b008c78d05473e48b8428 (patch)
tree8abc6926f647ea5f374a5b34c3a4820c5861e32e /spec/ruby/library/monitor/synchronize_spec.rb
parent15d05f8120745a121b93fab9fd2addf5f094e8d2 (diff)
Update to ruby/spec@b65d01f
Diffstat (limited to 'spec/ruby/library/monitor/synchronize_spec.rb')
-rw-r--r--spec/ruby/library/monitor/synchronize_spec.rb19
1 files changed, 15 insertions, 4 deletions
diff --git a/spec/ruby/library/monitor/synchronize_spec.rb b/spec/ruby/library/monitor/synchronize_spec.rb
index d851b98d6c..d78393eb3a 100644
--- a/spec/ruby/library/monitor/synchronize_spec.rb
+++ b/spec/ruby/library/monitor/synchronize_spec.rb
@@ -7,24 +7,35 @@ describe "Monitor#synchronize" do
monitor = Monitor.new
10.times do
- locked = false
+ wait_q = Queue.new
+ continue_q = Queue.new
thread = Thread.new do
begin
monitor.synchronize do
- locked = true
+ wait_q << true
# Do not wait here, we are trying to interrupt the ensure part of #synchronize
end
- sleep # wait for exception if it did not happen yet
+ continue_q.pop
rescue exc_class
monitor.should_not.mon_locked?
:ok
end
end
- Thread.pass until locked
+ wait_q.pop
thread.raise exc_class, "interrupt"
+ continue_q << true
thread.value.should == :ok
end
end
+
+ it "raises a LocalJumpError if not passed a block" do
+ -> { Monitor.new.synchronize }.should raise_error(LocalJumpError)
+ end
+
+ it "raises a thread error if the monitor is not owned on exiting the block" do
+ monitor = Monitor.new
+ -> { monitor.synchronize { monitor.exit } }.should raise_error(ThreadError)
+ end
end