Issue #6382 has been reported by nagachika (Tomoyuki C.).
Bug #6382: test_tracing_with_set_trace_func で RuntimeError “continuation
called across threads”
Author: nagachika (Tomoyuki C.)
Status: Assigned
Priority: Low
Assignee: nagachika (Tomoyuki C.)
Category: test
Target version:
ruby -v: ruby 2.0.0dev (2012-04-30 trunk 35497) [x86_64-darwin10.8.0]
make test-all を -j2 オプションつきで実行しているとごく稀に
test_tracing_with_set_trace_func で “continuation called across threads”
という RuntimeError 例外が発生していました。
set_trace_func に設定した lambda から Continuation を呼んでいて、別 Thread
がそれを呼んでしまっていたようです。
このテストは r32597 で [Feature #4347] のために追加されたもので、別 Thread
からの呼び出しについては元々特に考慮していないようでしたので、呼び出したスレッドをチェックするような変更をすればいいと思います。
diff --git a/test/ruby/test_continuation.rb
b/test/ruby/test_continuation.rb
index 64390d8…5e5b78c 100644
— a/test/ruby/test_continuation.rb
+++ b/test/ruby/test_continuation.rb
@@ -78,10 +78,13 @@ class TestContinuation < Test::Unit::TestCase
end
def tracing_with_set_trace_func
- orig_thread = Thread.current
cont = nil
func = lambda do |*args|
-
@memo += 1
-
cont.call(nil)
-
if orig_thread == Thread.current
-
@memo += 1
-
cont.call(nil)
-
endend
cont = callcc { |cc| cc }
if cont
稀にというか実際には一度しか発生していないので効果は確認できていないのですが、
エラーにはなってないので入れてしまいます。