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/