From: eregontp@... Date: 2020-12-10T11:53:08+00:00 Subject: [ruby-core:101386] [Ruby master Feature#17363] Timeouts Issue #17363 has been updated by Eregon (Benoit Daloze). marcandre (Marc-Andre Lafortune) wrote in #note-8: > Good point. We could create `Thread::Timeout` as a common base class for all 3? `Thread::TimeoutError` then maybe? Sounds OK, but not sure timeouts are always related to threads (e.g., an IO#select timeout). Might not matter much, so `Thread::TimeoutError` is fine for me. ---------------------------------------- Feature #17363: Timeouts https://bugs.ruby-lang.org/issues/17363#change-89144 * Author: marcandre (Marc-Andre Lafortune) * Status: Open * Priority: Normal ---------------------------------------- Builtin methods like `Queue.pop` and `Ractor.receive` have no timeout parameter. We should either: - provide such a parameter - and/or provide a `Timeout::wake` that raises an timeout error only if the block is currently sleeping. Details: ```ruby q = Queue.new # ... elem = Timeout::timeout(42) { q.pop } # => It is possible that an element is retreived from the queue but never stored in `elem` elem = Timeout::wake(42) { q.pop } # => Guaranteed that either element is retrieved from the queue or an exception is raised, never both Timeout::wake(42) { loop {} } # => infinite loop # and/or elem = q.pop(timeout: 42) ``` Currently, the only reliable way to have a Queue that accepts a timeout is to re-implement it from scratch. This post describe how involved that can be: https://spin.atomicobject.com/2017/06/28/queue-pop-with-timeout-fixed/ -- https://bugs.ruby-lang.org/ Unsubscribe: