Project

General

Profile

Bug #11344

Updated by nobu (Nobuyoshi Nakada) over 9 years ago

るりま <http://docs.ruby-lang.org/ja/2.2.0/method/Thread/s/handle_interrupt.html> によると、`Thread.handle_interrupt(TimeoutError => :never)` で `TimeoutError` 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` TimeoutError の代わりに `Timeout::ExitException` 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 中のコメントにも同様の記述があります。

Back