dumping ground for random patches and texts
 help / color / mirror / Atom feed
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

             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).