From: Eric Wong Date: 2018-06-26T09:47:02+00:00 Subject: [ruby-core:87639] Re: [Ruby trunk Bug#14867] Process.wait can wait for MJIT compiler process ``` Up to 14 patches, now, but I think most problems are solved, at least on Linux. FreeBSD 11.1 is close Links within: https://80x24.org/spew/20180626093817.1533-1-e@80x24.org/ One potential problem is stuff like: pids = [] pids << Process.fork { Process.exit! 2 } pids << Process.fork { Process.exit! 1 } pids << Process.fork { Process.exit! 0 } Process.waitall Can return extra PIDs with MJIT enabled, because exit! cannot cleanup and wait for any processes. I haven't been able to reproduce the problem lately, though... * 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) ``` Unsubscribe: