From: Eric Wong Date: 2014-05-24T05:48:56+00:00 Subject: [ruby-core:62722] Re: [ruby-trunk - Bug #9835] IGNORE signal handler has possible race condition in Ruby 2.1.2 nobu@ruby-lang.org wrote: > As signal is asynchronous, it is not guaranteed essentially? The problem is a race with the way we defer signal handling Kyle expected two states for USR1: 1) print children: sighandler, trap_list[sig].cmd === proc 2) ignore: SIG_IGN, trap_list[sig].cmd == 0 However, the problem is we queued a SIGUSR1 at 1), but queue and handle the signal after 2) passes So the queued signal hits cmd==0, leading to rb_threadptr_signal_raise and SignalException. Signals queued after 2) are safe from this condition. > Anyway, the patch doesn't seem evil. OK, I'll wait a bit for Kyle to confirm. However, I just managed to reproduce the issue by limiting to one CPU on one of my machines: schedtool -a 0x1 -e ruby test.rb My proposed patch seems to fix it on my machine.