Project

General

Profile

Actions

Bug #11362

closed

[PATCH] ensure Process.kill(:STOP, $$) is resumable

Added by normalperson (Eric Wong) almost 9 years ago. Updated about 6 years ago.

Status:
Closed
Target version:
-
ruby -v:
Backport:
[ruby-core:70011]

Description

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) 0001-make-Process.kill-STOP-resumable.patch normalperson (Eric Wong), 07/17/2015 10:05 AM
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0