Project

General

Profile

Actions

Bug #6009

closed

Rapid signal delivery via kill(2) causes SystemStackError

Added by drbrain (Eric Hodel) about 12 years ago. Updated over 11 years ago.

Status:
Closed
Target version:
-
ruby -v:
ruby 2.0.0dev (2012-02-11 trunk 34547) [x86_64-darwin11.2.0]
Backport:
[ruby-core:42524]

Description

=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


Related issues 1 (0 open1 closed)

Has duplicate Ruby master - Bug #4909: trapハンドラは再入されてはいけないのではないか?Closedkosaki (Motohiro KOSAKI)06/20/2011Actions
Actions

Also available in: Atom PDF

Like0
Like0Like0