Project

General

Profile

Actions

Bug #5240

closed

Hang when using threads + forks on Debian GNU/kFreeBSD

Added by lucas (Lucas Nussbaum) over 12 years ago. Updated about 7 years ago.

Status:
Closed
Target version:
[ruby-core:39146]

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

rb-th.diff (1.79 KB) rb-th.diff Petr.Salinger@seznam.cz (Petr Salinger), 08/30/2011 03:08 PM
rb-main.diff (430 Bytes) rb-main.diff Petr.Salinger@seznam.cz (Petr Salinger), 08/30/2011 03:08 PM

Updated by kosaki (Motohiro KOSAKI) over 12 years ago

  • Status changed from Open to Feedback
  • Target version set to 2.0.0

Please send us an analysis and a patch.

Updated by lucas (Lucas Nussbaum) over 12 years ago

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

Updated by Petr.Salinger@seznam.cz (Petr Salinger) over 12 years ago

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.

Updated by lucas (Lucas Nussbaum) over 12 years ago

Dear Ruby developers,

Could you comment on Petr Salinger's patch, and especially about where to put the pthread_atfork() call?

Thanks

Updated by kosaki (Motohiro KOSAKI) over 12 years ago

  • Status changed from Feedback to Assigned
  • Assignee set to ko1 (Koichi Sasada)

sasada-san, could you please tell us your opinion?

Updated by ko1 (Koichi Sasada) over 12 years ago

  • 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

Updated by ko1 (Koichi Sasada) over 11 years ago

  • Status changed from Assigned to Feedback
  • Target version changed from 2.0.0 to 2.6

Updated by ko1 (Koichi Sasada) about 7 years ago

  • Description updated (diff)
  • Status changed from Feedback to Closed

No discussion.

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0