From: askreet@... Date: 2014-05-14T18:20:09+00:00 Subject: [ruby-core:62588] [ruby-trunk - Bug #9835] IGNORE signal handler has possible race condition in Ruby 2.1.2 Issue #9835 has been updated by Kyle Smith. Nobuyoshi Nakada, Please take a second look at the ticket and attached source, you failed to address two things: 1) Why is this code not an issue in 1.8.7. The children (as expected) inherit the signal handler from the parent and those who lose the race run the parent signal handlers in their place. Is this new behavior in 2.1? 2) Why does it work properly if I trap the signal with an empty block, in place of IGNORE? Please see the comments in the original source that highlight alternate codepaths that do not raise SignalException. I still believe there is a defect here, or at least a change in signal handling with regard to fork() that I do not understand. Thank you, Kyle ---------------------------------------- Bug #9835: IGNORE signal handler has possible race condition in Ruby 2.1.2 https://bugs.ruby-lang.org/issues/9835#change-46732 * Author: Kyle Smith * Status: Rejected * Priority: Low * Assignee: * Category: core * Target version: * ruby -v: ruby 2.1.2p95 (2014-05-08 revision 45877) [x86_64-linux] * Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN ---------------------------------------- I'm migrating an application from 1.8.7 to 2.1.1/2.1.2, so I'm not sure when this was introduced. Attached is a demo program with some notes about how the IGNORE option to Signal.trap seems to have a race condition whereby receiving that signal shortly after that call, it raises a SignalException with the message including only the name of the signal it received. However, if you trap the signal with an empty block, that race does not occur. I've tested the attached program on 1.8.7 (no issue), 2.1.1 (issue) and 2.1.2 (issue) on a Linux system (Ubuntu lucid). ---Files-------------------------------- test.rb (1.37 KB) -- https://bugs.ruby-lang.org/