[#42344] [ruby-trunk - Feature #5964][Open] Make Symbols an Alternate Syntax for Strings — Tom Wardrop <tom@...>

23 messages 2012/02/03

[#42443] [ruby-trunk - Bug #5985][Open] miniruby skews "make benchmark" results — Eric Wong <normalperson@...>

21 messages 2012/02/08

[#42444] [ruby-trunk - Bug #5986][Open] Segmentation Fault — Luis Matta <levmatta@...>

16 messages 2012/02/08

[#42471] [ruby-trunk - Feature #5995][Open] calling io_advise_internal() in read_all() — Masaki Matsushita <glass.saga@...>

20 messages 2012/02/10

[#42560] [ruby-trunk - Bug #6011][Open] ruby-1.9.3-p0/lib/webrick/utils.rb:184: [BUG] Segmentation fault — Vit Ondruch <v.ondruch@...>

12 messages 2012/02/13

[#42579] [ruby-trunk - Bug #6012][Open] Proc#source_location also return the column — Roger Pack <rogerpack2005@...>

14 messages 2012/02/14

[#42685] [ruby-trunk - Bug #6036][Open] Test failures in Fedora Rawhide/17 — Bohuslav Kabrda <bkabrda@...>

14 messages 2012/02/16

[#42697] [ruby-trunk - Bug #6040][Open] Transcoding test failure: Big5 to UTF8 not defined (MinGW) — Luis Lavena <luislavena@...>

10 messages 2012/02/16

[#42813] [ruby-trunk - Feature #6065][Open] Allow Bignum marshalling/unmarshalling from C API — Martin Bosslet <Martin.Bosslet@...>

22 messages 2012/02/23

[#42815] [ruby-trunk - Bug #6066][Open] Fix "control may reach end of non-void function" warnings for clang — Eric Hodel <drbrain@...7.net>

15 messages 2012/02/23

[#42857] [ruby-trunk - Feature #6074][Open] Allow alias arguments to have a comma — Thomas Sawyer <transfire@...>

20 messages 2012/02/24

[#42891] [ruby-trunk - Feature #6083][Open] Hide a Bignum definition — Koichi Sasada <redmine@...>

23 messages 2012/02/25

[#42906] [ruby-trunk - Bug #6085][Open] Treatment of Wrong Number of Arguments — Marc-Andre Lafortune <ruby-core@...>

14 messages 2012/02/25

[#42949] [ruby-trunk - Bug #6089][Open] Test suite fails with OpenSSL 1.0.1 — Vit Ondruch <v.ondruch@...>

13 messages 2012/02/26

[ruby-core:42329] [RFC/PATCH] reinit signal_thread_list_lock atfork

From: Eric Wong <normalperson@...>
Date: 2012-02-02 22:19:53 UTC
List: ruby-core #42329
This issue was found under Ruby 1.9.3 (-p0 presumably), but probably
also applies to trunk.  I cannot reproduce the original issue since I
don't have access to a FreeBSD machine, so this patch is a
stab-in-the-dark for me.

I've only ensured this patch doesn't break existing behavior under
Linux/NPTL, not that it fixes a real problem under FreeBSD.

Original reports (for unicorn) are linked below.  Gmane threading didn't
work because some messages were too big for the ML.

  http://mid.gmane.org/CB4DE1F5.7D9%25philipp.bruell@skrill.com
  http://mid.gmane.org/20120201181445.GA31624@dcvr.yhbt.net
  http://mid.gmane.org/20120202193136.GA1478@dcvr.yhbt.net

This change is also pullable from the "sig-th-list-atfork" branch
on git://bogomips.org/ruby.git

From 95ab472c90c27e6e964be3ebc156d618a435b0df Mon Sep 17 00:00:00 2001
From: Eric Wong <normalperson@yhbt.net>
Date: Thu, 2 Feb 2012 21:40:58 +0000
Subject: [PATCH] thread_pthread.c (gvl_atfork): reinitialize
 signal_thread_list_lock

signal_thread_list_lock may be held in the timer thread during
fork(), causing the lock to be held in the child process by a
non-existent thread.  Reinitializing this should allow Ruby
signal handlers to continue working after fork()

This change may fix a problem exhibited with the following
script under a FreeBSD jail, running FreeBSD 8.2-STABLE on
amd64.  When SIGQUIT is sent to the parent, the child will
spin constantly instead of running it's signal handler:

-------------------------- 8< ----------------------------
pid = fork do
  r, w = IO.pipe
  trap(:QUIT) do
    puts "SIGQUIT received in child, exiting"
    w.close
  end
  r.read
end

trap(:QUIT) do
  puts "SIGQUIT received in parent, killing child"
  Process.kill(:QUIT, pid)
  p Process.waitpid2(pid)
  exit
end
sleep 1 # wait for child to setup sig handler
puts "Child ready on #{pid}, parent on #$$"
sleep
-------------------------- 8< ----------------------------
---
 thread_pthread.c |    3 +++
 1 files changed, 3 insertions(+), 0 deletions(-)

diff --git a/thread_pthread.c b/thread_pthread.c
index 52997ec..51c4a20 100644
--- a/thread_pthread.c
+++ b/thread_pthread.c
@@ -157,6 +157,9 @@ gvl_destroy(rb_vm_t *vm)
 static void
 gvl_atfork(rb_vm_t *vm)
 {
+#ifdef USE_SIGNAL_THREAD_LIST
+    native_mutex_initialize(&signal_thread_list_lock);
+#endif
     gvl_init(vm);
     gvl_acquire(vm, GET_THREAD());
 }
-- 
Eric Wong

In This Thread

Prev Next