Bug #4870
closedforkのテストが非常にまれに失敗する
Description
MacOS Xでmake check すると一度だけ以下のテストが fail しました。
#236 test_fork.rb:30:in `<top (required)>':
begin
if pid1 = fork
sleep 1
Process.kill("USR1", pid1)
_, s = Process.wait2(pid1)
s.success? ? :ok : :ng
else
if pid2 = fork
trap("USR1") { Time.now.to_s }
Process.wait2(pid2)
else
sleep 2
end
exit 0
end
rescue NotImplementedError
:ok
end
#=> "main_thread: run, sig: 30\nsignal-hand: sig: 30\nok" (expected "ok") [ruby-core:28924]
FAIL 1/934 tests failed
make: *** [yes-btest-ruby] Error 1
[1] 22511 exit 2 make check OPTS="-v" TESTS="-v -q -j8 "
~/ruby% make test-all OPTS="-v" TESTS="-v -q -j8 "
./miniruby -I./lib -I. -I.ext/common ./tool/runruby.rb --extout=.ext -- "./test/runner.rb" --ruby="./miniruby -I./lib -I. -I.ext/common ./tool/runruby.rb --extout=.ext --" -v -q -j8
Run options: "--ruby=./miniruby -I./lib -I. -I.ext/common ./tool/runruby.rb --extout=.ext --" -v -q -j8
採取されたバックトレースは以下
Process: ruby-193 [28604]
Path: /Users/kosaki/ruby/ruby-193
Identifier: ruby-193
Version: ??? (???)
Code Type: X86-64 (Native)
Parent Process: ruby-193 [26880]
Date/Time: 2011-06-11 15:03:23.827 +0900
OS Version: Mac OS X 10.6.7 (10J4138)
Report Version: 6
Exception Type: EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Crashed Thread: 0 Dispatch queue: com.apple.main-thread
Application Specific Information:
abort() called
Thread 0 Crashed: Dispatch queue: com.apple.main-thread
0 libSystem.B.dylib 0x00007fff885225d6 __kill + 10
1 libSystem.B.dylib 0x00007fff885c2cde abort + 83
2 ruby-193 0x0000000100037e92 rb_bug_errno + 0
3 ruby-193 0x00000001000fc3ca signal_exec + 0
4 libSystem.B.dylib 0x00007fff8853466a _sigtramp + 26
5 libSystem.B.dylib 0x00007fff885225d6 __kill + 10
6 ruby-193 0x00000001000fbfcb rb_f_kill + 673
7 ruby-193 0x0000000100175428 call_cfunc + 282
8 ruby-193 0x000000010017528f vm_call_cfunc + 284
9 ruby-193 0x0000000100174458 vm_call_method + 373
10 ruby-193 0x000000010016efba vm_exec_core + 11449
11 ruby-193 0x000000010017ed92 vm_exec + 147
12 ruby-193 0x000000010017f765 rb_iseq_eval_main + 45
13 ruby-193 0x000000010003ccfb ruby_exec_internal + 193
14 ruby-193 0x000000010003ce1f ruby_exec_node + 30
15 ruby-193 0x000000010003cdf2 ruby_run_node + 56
16 ruby-193 0x0000000100000953 main + 79 (main.c:40)
17 ruby-193 0x00000001000008fc start + 52
Thread 1:
0 libSystem.B.dylib 0x00007fff8850ef8a __semwait_signal + 10
1 libSystem.B.dylib 0x00007fff88512da1 _pthread_cond_wait + 1286
2 ruby-193 0x0000000100182a82 native_cond_timedwait + 37
3 ruby-193 0x0000000100183431 thread_timer + 121
4 libSystem.B.dylib 0x00007fff8850d4f6 _pthread_start + 331
5 libSystem.B.dylib 0x00007fff8850d3a9 thread_start + 13
Thread 0 crashed with X86 Thread State (64-bit):
rax: 0x0000000000000000 rbx: 0x0000000000000001 rcx: 0x000000010035c948 rdx: 0x0000000000000000
rdi: 0x0000000000006fbc rsi: 0x0000000000000006 rbp: 0x000000010035c960 rsp: 0x000000010035c948
r8: 0x00007fff70f2da40 r9: 0x0000000000000000 r10: 0x00007fff8851e616 r11: 0xffffff80002e4730
r12: 0x0000000000000000 r13: 0x0000000000000000 r14: 0x0000000100493b48 r15: 0x00000001005ffef8
rip: 0x00007fff885225d6 rfl: 0x0000000000000202 cr2: 0x000000010035afd8
Binary Images:
0x100000000 - 0x100225fe7 +ruby-193 ??? (???) <6031750C-E9DF-0F02-C572-144BCA6227E2> /Users/kosaki/ruby/ruby-193
0x100362000 - 0x100363fff +encdb.bundle ??? (???) <44DF3334-78BC-7676-3094-9C703E5554A8> /Users/kosaki/ruby/.ext/x86_64-darwin10.7.4/enc/encdb.bundle
0x100366000 - 0x100367fff +transdb.bundle ??? (???) <0DB59CC1-CB0E-B01C-A798-D8B6D67D2D19> /Users/kosaki/ruby/.ext/x86_64-darwin10.7.4/enc/trans/transdb.bundle
0x7fff5fc00000 - 0x7fff5fc3bdef dyld 132.1 (???) /usr/lib/dyld
0x7fff805a7000 - 0x7fff8065dfff libobjc.A.dylib 227.0.0 (compatibility 1.0.0) <1960E662-D35C-5D98-EB16-D43166AE6A22> /usr/lib/libobjc.A.dylib
0x7fff862ec000 - 0x7fff862f0ff7 libmathCommon.A.dylib 315.0.0 (compatibility 1.0.0) <95718673-FEEE-B6ED-B127-BCDBDB60D4E5> /usr/lib/system/libmathCommon.A.dylib
0x7fff86677000 - 0x7fff866f4fef libstdc++.6.dylib 7.9.0 (compatibility 7.0.0) <35ECA411-2C08-FD7D-11B1-1B7A04921A5C> /usr/lib/libstdc++.6.dylib
0x7fff884d3000 - 0x7fff88694fff libSystem.B.dylib 125.2.10 (compatibility 1.0.0) /usr/lib/libSystem.B.dylib
0x7fff88789000 - 0x7fff887d5fff libauto.dylib ??? (???) <328CCF97-091D-C529-E576-C78583445711> /usr/lib/libauto.dylib
0x7fffffe00000 - 0x7fffffe01fff libSystem.B.dylib ??? (???) /usr/lib/libSystem.B.dylib
Updated by nahi (Hiroshi Nakamura) over 13 years ago
- Assignee set to kosaki (Motohiro KOSAKI)
振り損ねていたようです。たぶん他に誰にも拾えないので処遇をお任せします。
Updated by kosaki (Motohiro KOSAKI) over 13 years ago
- Status changed from Open to Assigned
- Target version changed from 1.9.3 to 2.0.0
ああ、担当者を設定し忘れていましたか。すいません。
ええと、ちょっと原因不明すぎて193に間に合う気がしないので遺憾ながら 1.9.x に設定しました。
以下調査状況
Macのlibcまわりのコードを読んだ感じだと _sigtramp はシグナルハンドラの本体
(というかユーザが登録いた本物のシグナルハンドラとsigreturnを呼ぶラッパ)なのでシグナルを
受信したんだろうな。と
で、シグナルハンドラの延長で signal_exec() が呼ばれているのはあからさまにおかしいので
メモリ破壊か、最適化の影響でバックトレースが取れなかったかなんですが、ソース見ると
signal_exec()から直接 rb_bug_errno() を呼ぶルートがなさそうなので最適化の影響を疑っています。
なので、rb_bug_errno()を呼んでるあたりのどこかでEINTR処理を追加したら良さそうなんですが、はてさて
Updated by kosaki (Motohiro KOSAKI) about 13 years ago
- Status changed from Assigned to Rejected
だめ。
二度と再現できない。自己クローズします