From: normalperson@... Date: 2015-07-17T10:05:09+00:00 Subject: [ruby-core:70011] [Ruby trunk - Bug #11362] [Open] [PATCH] ensure Process.kill(:STOP, $$) is resumable Issue #11362 has been reported by Eric Wong. ---------------------------------------- Bug #11362: [PATCH] ensure Process.kill(:STOP, $$) is resumable https://bugs.ruby-lang.org/issues/11362 * Author: Eric Wong * Status: Open * Priority: Normal * Assignee: Eric Wong * ruby -v: * Backport: 2.0.0: REQUIRED, 2.1: REQUIRED, 2.2: REQUIRED ---------------------------------------- make Process.kill(:STOP, $$) resumable Self-inflicted signals are delivered immediately. This is fine for most signals which are catchable, but SIGSTOP and SIGKILL are special and cannot be caught by a userspace process. SIGKILL is easy, the process will die immediately and we won't care for it. However, SIGSTOP is tricky because we cannot know when it is delivered. Thus, we must rely on sighandler->timer_thread to signal th->interrupt_cond when SIGCONT resumes the process. * signal.c (Init_signal): install sighandler for SIGCONT * test/ruby/test_process.rb (test_stop_self_resumable): new test Will commit unless there's a better way. I found this bug while looking into making signal handling work in single-threaded processes without relying on timer thread. ---Files-------------------------------- 0001-make-Process.kill-STOP-resumable.patch (2.65 KB) -- https://bugs.ruby-lang.org/