Issue #6416 has been updated by kosaki (Motohiro KOSAKI).

Assignee changed from kosaki (Motohiro KOSAKI) to ko1 (Koichi Sasada)

Hi ko1,

This is because thread_join() is not designed reentrant. It can insert a thread twice join_list. And then, join_list
is going to become circular ring and it lead to deadlock.

So, I think th.join in trap context should raise ThreadError. What do you think?


----------------------------------------
Bug #6416: Deadlock when calling Thread#join from signal interrupt context
https://bugs.ruby-lang.org/issues/6416#change-26698

Author: ender672 (Timothy Elliott)
Status: Assigned
Priority: Normal
Assignee: ko1 (Koichi Sasada)
Category: 
Target version: 
ruby -v: ruby 2.0.0dev (2012-05-09 trunk 35598) [x86_64-linux]


=begin
The interpreter can deadlock when calling Thread#join both from the main context and from the signal handler context.

  t = Thread.new{ sleep 3 }

  Signal.trap "SIGINT" do
    t.join
  end

  puts 'Press ctrl + c now'
  t.join

The above will deadlock on linux x86_64 with ruby 1.9.x and ruby trunk. It works fine with ruby 1.8.7-p352 and JRuby.

=end




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