From: "naruse (Yui NARUSE)" Date: 2012-04-24T12:32:10+09:00 Subject: [ruby-core:44574] [ruby-trunk - Bug #6341] SIGSEGV: Thread.new { fork { GC.start } }.join Issue #6341 has been updated by naruse (Yui NARUSE). I tried the code with NetBSD 5.1_STABLE (GENERIC) i386 Mon Oct 3 14:22:23 JST 2011 and it works. So NetBSD recently broke something around pthread. As far as I know, Ruby 1.9 on NetBSD 4.0 can't fork because pthread can't mix with fork as mame and kosaki said. But NetBSD 5.0 or later seems to try to work them. (I reported such problem as kern/42772) So this should be handled as Third Party's Issue, and report to NetBSD. NetBSD may fix if they treated this as a bug. mame (Yusuke Endoh) wrote: > 2012/4/24, kosaki (Motohiro KOSAKI) : > > I think this is a kind of documentation issue. If you use C, you can't use > > both thread and fork. It's obvious. > > And almost people think ruby naturally has the same limitation because ruby > > is written by C. But rudolf implicitly > > pointed out some people don't think so. > > No, this is not documentation issue. > The easy code *actually* causes SEGV on the platform, doesn't it? > I'm against remaining such a significant problem and adding ad-hoc > guards to the tests. Ruby shouldn't cause SEGV, but > I suggest to make Kernel#fork raise a NotImplementedError on NetBSD > 5.0+. > Fortunately, the tests already have a guard for NotImplementedError > because there is a supported platform that does not support > Kernel#fork (you know, windows). > Even on the platform, SEGV is not allowed, in principle. > > Note, my suggestion is based on my uncertain guess about NetBSD 5.0+. > I'm not even a user of NetBSD. I think anyone should confirm if my > guess is correct. > Kosaki-san, if you seriously want to support NetBSD, I'd like you to > be a platform maintainer for NetBSD. as I said above, it works with NetBSD 5.1. So this is a bug added after 5.1. ---------------------------------------- Bug #6341: SIGSEGV: Thread.new { fork { GC.start } }.join https://bugs.ruby-lang.org/issues/6341#change-26137 Author: rudolf (r stu3) Status: Feedback Priority: Low Assignee: Category: core Target version: ruby -v: ruby 1.9.3p196 (2012-04-21) [x86_64-netbsd6.0.] When running ruby (ruby-lang.org) test suite, I am able to provoke a segfault using a test from bootstraptest/test_thread.rb: begin Thread.new { fork { GC.start } }.join pid, status = Process.wait2 $result = status.success? ? :ok : :ng rescue NotImplementedError $result = :ok end It is easy to provoke the problem with this command launched in shell (1-20 times until the problem shows): $ ruby -e "Thread.new { fork { GC.start } }.join" Environment: - NetBSD-6.0_BETA amd64, from 2012/04/21 - ruby_1_9_3 branch, revision 35416 (I've also tried trunk and it has similar problem) - 8 GB RAM, a lot of free memory, dual-core CPU - gcc version 4.5.3 (NetBSD nb2 20110806) Backtrace and "bt full" is available in the attached gdb_session.txt file. -- http://bugs.ruby-lang.org/