From: moio@... Date: 2019-05-31T12:26:38+00:00 Subject: [ruby-core:92908] [Ruby trunk Bug#15886] return in rescue block breaks Timeout.timeout Issue #15886 has been updated by moio (Silvio Moioli). Well, as a Timeout.timeout user I would like to be able to wrap any code in a block and have a guarantee it will actually terminate after the specified number of seconds - no matter how the wrapped code looks like and especially if it is from a third party. IIUC this is currently impossible to obtain fully with Timeout.timeout - certain code patterns like the one described will just break the above "contract". This is due to the combination of 1) the design of the Ruby language itself and 2) the implementation details of the method itself (specifically, the fact it internally raises an Exception as the means of blocking execution of the block, and that Exception is subject to the same semantics of any other Exception in Ruby, as you explained, particularly about rescue/ensure and return). Can you confirm my understanding above is correct? ---------------------------------------- Bug #15886: return in rescue block breaks Timeout.timeout https://bugs.ruby-lang.org/issues/15886#change-78282 * Author: moio (Silvio Moioli) * Status: Rejected * Priority: Normal * Assignee: * Target version: * ruby -v: ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux-gnu] * Backport: 2.4: UNKNOWN, 2.5: UNKNOWN, 2.6: UNKNOWN ---------------------------------------- Passing `Timeout.timeout` a block with a rescue clause that contains a return statement prevents `Timeout::Error` to be raised as expected. Reproducer: ``` ruby require 'timeout' begin Timeout.timeout(1) do begin sleep 10 ensure puts "ensure block executed" ## commenting line below restores expected behaviour return true end end rescue Timeout::Error => e puts "EXPECTED BEHAVIOUR: timeout error rescued" end ``` Expected output: ``` ensure block executed EXPECTED BEHAVIOR: timeout error rescued ``` Actual output: ``` ensure block executed ``` Looking in Redmine the following two issues appear related (but I lack the insight to tell for sure): - https://bugs.ruby-lang.org/issues/14859 - https://bugs.ruby-lang.org/issues/7503 I apologize in advance if this issue is a duplicate. -- https://bugs.ruby-lang.org/ Unsubscribe: