From: eregontp@... Date: 2020-12-13T12:30:55+00:00 Subject: [ruby-core:101437] [Ruby master Feature#17363] Timeouts Issue #17363 has been updated by Eregon (Benoit Daloze). So another option would be to move the `timeout` stdlib to core, which could be interesting (can be better optimized, avoid an extra Ruby thread, etc). ---------------------------------------- Feature #17363: Timeouts https://bugs.ruby-lang.org/issues/17363#change-89205 * 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: