[ruby-dev:49179] [Ruby trunk - Bug #11344] [Open] Thread.handle_interrupt(TimeoutError => :never) が効かない

From: tommy@...
Date: 2015-07-10 10:32:48 UTC
List: ruby-dev #49179
Issue #11344 has been reported by Masahiro Tomita.

----------------------------------------
Bug #11344: Thread.handle_interrupt(TimeoutError => :never) が効かない
https://bugs.ruby-lang.org/issues/11344

* Author: Masahiro Tomita
* Status: Open
* Priority: Normal
* Assignee: 
* ruby -v: ruby 2.2.2p95 (2015-04-13 revision 50295) [x86_64-linux]
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN
----------------------------------------
るりま <http://docs.ruby-lang.org/ja/2.2.0/method/Thread/s/handle_interrupt.html> によると、`Thread.handle_interrupt(TimeoutError => :never)` で TimeoutError を制御できると書かれていますが、働きません。

~~~ruby
require 'timeout'
Thread.handle_interrupt(TimeoutError => :never) do
  timeout(1) do
    sleep 2
    p 'done'
  end
end
#=> sample.rb:4:in `sleep': execution expired (Timeout::Error)
~~~

TimeoutError の代わりに Timeout::ExitException を指定すれば働きます。

~~~ruby
require 'timeout'
Thread.handle_interrupt(Timeout::ExitException => :never) do
  timeout(1) do
    sleep 2
    p 'done'
  end
end
#=> "done"
#=> sample.rb:2:in `handle_interrupt': execution expired (Timeout::ExitException)
~~~

これは意図された挙動でしょうか。

なお、るりまだけじゃなく、thread.c 中のコメントにも同様の記述があります。



-- 
https://bugs.ruby-lang.org/

In This Thread

Prev Next