From: Petr Salinger <Petr.Salinger@...>
Date: 2011-08-30T15:08:49+09:00
Subject: [ruby-core:39194] [Ruby 1.9 - Bug #5240] Hang when using threads + forks on Debian GNU/kFreeBSD


Issue #5240 has been updated by Petr Salinger.

File rb-th.diff added
File rb-main.diff added

I looked at the change and  in general should work even for our slightly broken pthread semantic on GNU/kFreeBSD.
It should be possible to workaround it by encapsulating timer_thread_pipe_owner_proces usage, as shown
in first attached diff. We need to put somewhere during initialization

pthread_atfork(NULL, NULL, timer_thread_child_at_fork)

Even on fully conforming pthread implementation might be GNU/kFreeBSD variant better,
as getpid() might be costly system call.

The problem is that place in main.c (as shown in 2nd diff) does not link.
Please could you advice where to put this part of code. After that I would like to test it, whether it really works for us as expected.

Please advice me.
----------------------------------------
Bug #5240: Hang when using threads + forks on Debian GNU/kFreeBSD
http://redmine.ruby-lang.org/issues/5240

Author: Lucas Nussbaum
Status: Feedback
Priority: Normal
Assignee: 
Category: 
Target version: 1.9.x
ruby -v: 1.9.3


Hi,

The following test script (derived from a test in bootstraptest/test_fork.rb)
hangs very frequently on Debian GNU/kFreeBSD:
<----
fork { }
puts "after fork"
t = Thread.start { fork{ } }
puts "after fork in thread"
t.join
puts "after join"
--->

Using git bisect, I determined that the commit introducing that regression is
SVN revision 32244:
- that revision hangs
- 32243 does not hang

This bug makes 1.9.3 unsuitable for being uploaded to Debian. So it would be
great if it was fixed before the release. Also, there are other test failures
that I'd like to analyze (but I can't because of that one), so I feel quite
worried about this.


-- 
http://redmine.ruby-lang.org