Issue #13768 has been updated by ko1 (Koichi Sasada).


これ、dead-lock の定義の問題なので、ちょっと議論が要るような気がしています。

> Signal.trapを設定していたら常にデッドロックではない、とすべきというところでしょうか。

いいんかな、これで。例えば、webrick 使ってたらデッドロック検出出来ないとか。


----------------------------------------
Bug #13768: SIGCHLD and Thread dead-lock problem
https://bugs.ruby-lang.org/issues/13768#change-65956

* Author: keiju (Keiju Ishitsuka)
* Status: Open
* Priority: Normal
* Assignee: 
* Target version: 
* ruby -v: 
* Backport: 2.2: UNKNOWN, 2.3: UNKNOWN, 2.4: UNKNOWN
----------------------------------------
 けいじゅ@いしつかです.
 
 下記のプログラムを実行するとThreadがデッドロックしたと例外が発生します.
 # コメント部分をはずせば, デッドロックはしません
 
 シグナルのtrapが絡むときのデッドロックの検知に問題があるのではないかと
 思いますがいかがでしょう? 

 ```
 % ruby -v
 ruby 2.5.0dev (2017-07-25 trunk 59417) [i686-linux]
 ```
 ```ruby
 q = Queue.new
 p = Queue.new
 
 trap(:SIGCHLD) do
   puts "SIGCHLD"
   q.push 1
 end
 
 Thread.start do
   Process.spawn("/bin/sleep 1")
 end
 
 #Thread.start do
 #  loop do
 #    sleep 100
 #  end
 #end
 
 th = Thread.start{
   p.push q.pop
 }
 
 p.pop
 ```
 __
 ---------------------------------------------------->> 石塚 圭樹 <<---
 ---------------------------------->> e-mail: keiju / ishitsuka.com <<---



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