Bug #5240
closed
Hang when using threads + forks on Debian GNU/kFreeBSD
Added by lucas (Lucas Nussbaum) about 13 years ago.
Updated almost 8 years ago.
Description
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.
Files
- Status changed from Open to Feedback
- Target version set to 2.0.0
Please send us an analysis and a patch.
I'm sorry, I'm not familiar with that code at all.
What I can provide is a kfreebsd amd64 qemu image inside which it is easy to reproduce the problem (I used it to bisect).
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.
Dear Ruby developers,
Could you comment on Petr Salinger's patch, and especially about where to put the pthread_atfork() call?
Thanks
- Status changed from Feedback to Assigned
- Assignee set to ko1 (Koichi Sasada)
sasada-san, could you please tell us your opinion?
- ruby -v changed from 1.9.3 to -
Hi,
(2011/08/29 23:08), Petr Salinger wrote:
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.
How about to add pthread_atfork() at rb_thread_create_timer_thread()?
--
// SASADA Koichi at atdot dot net
- Status changed from Assigned to Feedback
- Target version changed from 2.0.0 to 2.6
- Description updated (diff)
- Status changed from Feedback to Closed
Also available in: Atom
PDF
Like0
Like0Like0Like0Like0Like0Like0Like0Like0