From: Eric Hodel Date: 2012-02-13T16:51:50+09:00 Subject: [ruby-core:42524] [ruby-trunk - Bug #6009][Open] Rapid signal delivery via kill(2) causes SystemStackError Issue #6009 has been reported by Eric Hodel. ---------------------------------------- Bug #6009: Rapid signal delivery via kill(2) causes SystemStackError https://bugs.ruby-lang.org/issues/6009 Author: Eric Hodel Status: Open Priority: Normal Assignee: Category: core Target version: ruby -v: ruby 2.0.0dev (2012-02-11 trunk 34547) [x86_64-darwin11.2.0] =begin Running the following program with a trivial signal handler can crash with a SystemStackError if signals are delivered rapidly: $ ruby -ve 'p Process.pid; trap "USR1" do 10 ** 100; end; sleep' ruby 2.0.0dev (2012-02-11 trunk 34547) [x86_64-darwin11.2.0] 4504 -e: SystemStackError In a separate terminal: ruby -e 'loop do Process.kill "USR1", 4504 end' As each signal is delivered, ruby interrupts the current signal handler to perform the newly arrived one and quickly runs out of stack. With an empty system handler the SystemStackError takes slightly longer to occur. This also occurs with 1.9.3-p0: $ ~/.multiruby/install/1.9.3-p0/bin/ruby -ve 'p Process.pid; trap "USR1" do 10 ** 100; end; sleep' ruby 1.9.3p0 (2011-10-30 revision 33570) [x86_64-darwin11.2.0] 4529 -e: SystemStackError and with ruby-1.9.2-p290: $ ~/.multiruby/install/1.9.2-p290/bin/ruby -ve 'p Process.pid; trap "USR1" do 10 ** 100; end; sleep' ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-darwin11.2.0] 4534 ruby-1.8.7-p330 exits with a zero exit code: $ ~/.multiruby/install/1.8.7-p330/bin/ruby -ve 'p Process.pid; trap "USR1" do 10 ** 100; end; sleep' ruby 1.8.7 (2010-12-23 patchlevel 330) [i686-darwin11.2.0] 4564 $ echo $? 0 =end -- http://bugs.ruby-lang.org/