ruby-concurrency / concurrent-ruby

Modern concurrency tools including agents, futures, promises, thread pools, supervisors, and more. Inspired by Erlang, Clojure, Scala, Go, Java, JavaScript, and classic concurrency patterns.
https://ruby-concurrency.github.io/concurrent-ruby/
Other
5.68k stars 418 forks source link

Repeated calls to `ResolvableEvent#resolve` with `raise_on_reassign = true` does not raise #964

Closed hanazuki closed 1 year ago

hanazuki commented 1 year ago

Documentation for ResolvableEvent#resolve says:

resolve(raise_on_reassign = true, reserved = false) ⇒ self, false

raise_on_reassign (Boolean) (defaults to: true) — should method raise exception if already resolved

But it just returns false on reassignment.

Reproducing code:

require 'concurrent'
Concurrent::Promises.resolvable_event.resolve.resolve  # => Expected to raise, but returns false
Concurrent::Promises.resolvable_event.resolve.resolve(true)  # => ditto

* Operating system:                linux
* Ruby implementation:             Ruby
* `concurrent-ruby` version:       1.1.10
* `concurrent-ruby-ext` installed: no
* `concurrent-ruby-edge` used:     no