Skip to content

Commit f785288

Browse files
hanazukieregon
authored andcommitted
ResolvableEvent#resolve(true) should raise on reassignment
This patch fixes the bug that calling #resolve with raise_on_reassign = true on an already resolved ResolvableEvent does not raise an Exception. Fixes: #964
1 parent f0bc349 commit f785288

File tree

2 files changed

+13
-1
lines changed

2 files changed

+13
-1
lines changed

lib/concurrent-ruby/concurrent/promises.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -892,7 +892,7 @@ def with_default_executor(executor)
892892
private
893893

894894
def rejected_resolution(raise_on_reassign, state)
895-
Concurrent::MultipleAssignmentError.new('Event can be resolved only once') if raise_on_reassign
895+
raise Concurrent::MultipleAssignmentError.new('Event can be resolved only once') if raise_on_reassign
896896
return false
897897
end
898898

spec/concurrent/promises_spec.rb

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -560,6 +560,18 @@ def behaves_as_delay(delay, value)
560560
expect(event.wait(0, true)).to be_truthy
561561
end
562562

563+
specify "#resolve(raise_on_reassign = true)" do
564+
event = resolvable_event
565+
event.resolve
566+
expect { event.resolve }.to raise_error(Concurrent::MultipleAssignmentError)
567+
end
568+
569+
specify "#resolve(raise_on_reassign = false)" do
570+
event = resolvable_event
571+
event.resolve
572+
expect(event.resolve(false)).to be_falsey
573+
end
574+
563575
specify "reservation" do
564576
event = resolvable_event
565577
expect(event.reserve).to be_truthy

0 commit comments

Comments
 (0)