Issue #4777 has been updated by Motohiro KOSAKI.


OK, I and Endoh-san investigated more. I bet the guilty linux regression is below.
Ruby's timer thread is using pthread_cond_timedwait() and it is using futex_wait() internally. 

And, more importantly, this fixing patch was already backported to 2.6.38.4.
Thus, the issue is really Ubuntu specific, unfortunately.


see https://bugzilla.kernel.org/show_bug.cgi?id=32922

---------------------------------------------------------------------
commit 0cd9c6494ee5c19aef085152bc37f3a4e774a9e1
Author: Darren Hart <dvhart / linux.intel.com>
Date:   Thu Apr 14 15:41:57 2011 -0700

    futex: Set FLAGS_HAS_TIMEOUT during futex_wait restart setup

    The FLAGS_HAS_TIMEOUT flag was not getting set, causing the restart_block to
    restart futex_wait() without a timeout after a signal.

    Commit b41277dc7a18ee332d in 2.6.38 introduced the regression by accidentally
    removing the the FLAGS_HAS_TIMEOUT assignment from futex_wait() during the setup
    of the restart block. Restore the originaly behavior.

    Fixes: https://bugzilla.kernel.org/show_bug.cgi?id=32922

    Reported-by: Tim Smith <tsmith201104 / yahoo.com>
    Reported-by: Torsten Hilbrich <torsten.hilbrich / secunet.com>
    Signed-off-by: Darren Hart <dvhart / linux.intel.com>
    Signed-off-by: Eric Dumazet <eric.dumazet / gmail.com>
    Cc: Peter Zijlstra <peterz / infradead.org>
    Cc: John Kacur <jkacur / redhat.com>
    Cc: stable / kernel.org
    Link: http://lkml.kernel.org/r/%3Cdaac0eb3af607f72b9a4d3126b2ba8fb5ed3b883.1302820917.git.dvhart%40linux.intel.com%3E
    Signed-off-by: Thomas Gleixner <tglx / linutronix.de>
----------------------------------------
Bug #4777: Ruby 1.9.2-p180 ignoring INT, TERM, and QUIT until it receives CONT
http://redmine.ruby-lang.org/issues/4777

Author: Nathan Sobo
Status: Third Party's Issue
Priority: Normal
Assignee: 
Category: 
Target version: 
ruby -v: -


We're having an intermittent but fairly frequent issue with a resque worker process that we're daemonizing with daemontools on Ubuntu 10.04 LTS

When we send a QUIT or TERM signal to the process, it is not handled.
When we send a CONT, the process traps and handles QUIT and TERM signals that were ignored just before handling the CONT.
It's as if the CONT frees the signals that were previously ignored.


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