From: Eric Wong <e@80x24.org>
To: spew@80x24.org
Subject: [PATCH 00/14] SIGCHLD hijack for waitpid
Date: Tue, 26 Jun 2018 09:38:03 +0000 [thread overview]
Message-ID: <20180626093817.1533-1-e@80x24.org> (raw)
* Implemented rb_grantpt for ext/pty use (to temporarily disable SIGCHLD)
* reinstated non-SIGCHLD code path for rb_waitpid
* split Process.wait(PID > 0) and Process.wait(PID <= 0) threads
to prioritize (PID > 0) waiters. This was an important change.
* avoid spurious wakeups in main thread if no trap(:CHLD) users
(needed to get OpenSSL::PKey::RSA.new working with rubygems test
and test/-ext-/gvl/test_last_thread.rb to pass on Linux)
In retrospect, we could probably be avoiding spurious main thread
wakeups for all signals when nobody registers trap(sig).
However, this isn't effective on FreeBSD... We may need to block
non-VTALRM signals in main thread, and only enable interrupts in
tiner-thread.
The actual history is a mess, will need to cleanup and do more documenting
before committing. MJIT takes forever to test :<
I am happy that ext/pty/pty.c is cleaner with the rb_grantpt change, now :)
The following changes since commit 4444025d16ae1a586eee6a0ac9bdd09e33833f3c:
mjit_compile.inc.erb: drop unnecessary variable (2018-06-25 14:15:26 +0000)
are available in the Git repository at:
git://80x24.org/ruby.git mjit-chld-wip
for you to fetch changes up to 6545efeee931baa42f38d9b86941c0e5d30c1044:
process.c (rb_waitpid): reimplement non-SIGCHLD code path (2018-06-26 09:09:21 +0000)
----------------------------------------------------------------
Eric Wong (14):
hijack SIGCHLD handler for internal use
fix SIGCHLD hijacking race conditions
mjit.c: allow working on platforms without SIGCHLD
cleanups
handle SIGCHLD in both the timer-thread and main thread
Revert "test_process.rb: skip tests for Bug 14867"
Revert "spec: skip Process wait specs on MJIT"
wip testing
pgrp list
grantpt
blocking mjit_finish
reinitialize waitpid_lock
signal.c: prevent spurious wakeup of main thread for SIGCHLD
process.c (rb_waitpid): reimplement non-SIGCHLD code path
configure.ac | 1 +
ext/pty/pty.c | 22 +--
internal.h | 3 +
mjit.c | 47 ++++--
process.c | 261 +++++++++++++++++++++++++++------
signal.c | 119 +++++++++++----
spec/mspec/lib/mspec/guards/feature.rb | 6 -
spec/ruby/core/process/wait2_spec.rb | 26 ++--
spec/ruby/core/process/wait_spec.rb | 122 ++++++++-------
spec/ruby/core/process/waitall_spec.rb | 67 +++++----
test/ruby/test_process.rb | 3 -
thread.c | 34 +++++
thread_pthread.c | 18 +++
vm_core.h | 13 ++
14 files changed, 525 insertions(+), 217 deletions(-)
--
EW
next reply other threads:[~2018-06-26 9:38 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-06-26 9:38 Eric Wong [this message]
2018-06-26 9:38 ` [PATCH 01/14] hijack SIGCHLD handler for internal use Eric Wong
2018-06-26 9:38 ` [PATCH 02/14] fix SIGCHLD hijacking race conditions Eric Wong
2018-06-26 9:38 ` [PATCH 03/14] mjit.c: allow working on platforms without SIGCHLD Eric Wong
2018-06-26 9:38 ` [PATCH 04/14] cleanups Eric Wong
2018-06-26 9:38 ` [PATCH 05/14] handle SIGCHLD in both the timer-thread and main thread Eric Wong
2018-06-26 9:38 ` [PATCH 06/14] Revert "test_process.rb: skip tests for Bug 14867" Eric Wong
2018-06-26 9:38 ` [PATCH 07/14] Revert "spec: skip Process wait specs on MJIT" Eric Wong
2018-06-26 9:38 ` [PATCH 08/14] wip testing Eric Wong
2018-06-26 9:38 ` [PATCH 09/14] pgrp list Eric Wong
2018-06-26 9:38 ` [PATCH 10/14] grantpt Eric Wong
2018-06-26 9:38 ` [PATCH 11/14] blocking mjit_finish Eric Wong
2018-06-26 9:38 ` [PATCH 12/14] reinitialize waitpid_lock Eric Wong
2018-06-26 9:38 ` [PATCH 13/14] signal.c: prevent spurious wakeup of main thread for SIGCHLD Eric Wong
2018-06-26 9:38 ` [PATCH 14/14] process.c (rb_waitpid): reimplement non-SIGCHLD code path Eric Wong
2018-06-26 10:51 ` [PATCH 15/14] force SIGCHLD to the timer-thread Eric Wong
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180626093817.1533-1-e@80x24.org \
--to=e@80x24.org \
--cc=spew@80x24.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).