From: "kosaki (Motohiro KOSAKI)" Date: 2012-12-02T06:23:33+09:00 Subject: [ruby-dev:46680] [ruby-trunk - Bug #7468] GC_GUARD漏れもしくはmark漏れっぽいエラーが発生してます。 Issue #7468 has been updated by kosaki (Motohiro KOSAKI). SET_MACHINE_STACK_ENDの実体が #if defined(__x86_64__) && defined(__GNUC__) && !defined(__native_client__) #define SET_MACHINE_STACK_END(p) __asm__ ("movq\t%%rsp, %0" : "=r" (*(p))) のように volatileなしasmで、かつオペランド制約にrspを使うということが一切記述されてないので どういう最適化されても文句はいえないのではないでしょうか。 とりあえず r38134 で volatileつけときました。この結果アセンブリは 3f92: e8 00 00 00 00 callq 3f97 3f97: 48 89 e0 mov %rsp,%rax 3f9a: 49 8b 7c 24 08 mov 0x8(%r12),%rdi 3f9f: 49 89 84 24 b0 01 00 mov %rax,0x1b0(%r12) 3fa6: 00 3fa7: 4c 89 e6 mov %r12,%rsi 3faa: e8 c1 fa ff ff callq 3a70 という感じになって、意図した通り gvl_yield()の直前に%rspをメモリに書いているように見えます。問題が再現出来る人がいれば 誰か確認お願いできませんか。 # たとえ直ってなくても r38134 は1.9.3にバックポート必要でしょうね。現状危なすぎる ---------------------------------------- Bug #7468: GC_GUARD漏れもしくはmark漏れっぽいエラーが発生してます。 https://bugs.ruby-lang.org/issues/7468#change-34296 Author: tarui (Masaya Tarui) Status: Open Priority: High Assignee: authorNari (Narihiro Nakamura) Category: core Target version: 2.0.0 ruby -v: ruby -v: ruby 2.0.0dev (2012-11-30 trunk 37999) [x86_64-linux] いつからかtest-allで時々エラーが発生するようになってます。 make test-all TESTS="-qv -n /test_string\$$/" でsegvや 1) Error: test_string(DL::TestFunc): ArgumentError: assertion message must be String or Proc, but Thread::Backtrace was given. などと言われるようになりました。 GC.stress = true なのと、Thread::Backtraceが通常のpassでは入る事はないっぽいのでGC周りのバグだと思います。 -- http://bugs.ruby-lang.org/