Actions
Bug #6382
closedtest_tracing_with_set_trace_func で RuntimeError "continuation called across threads"
Description
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
稀にというか実際には一度しか発生していないので効果は確認できていないのですが、
エラーにはなってないので入れてしまいます。
Actions
Like0
Like0