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
稀にというか実際には一度しか発生していないので効果は確認できていないのですが、
エラーにはなってないので入れてしまいます。
Updated by nagachika (Tomoyuki Chikanaga) over 12 years ago
- Status changed from Assigned to Closed
- % Done changed from 0 to 100
This issue was solved with changeset r35498.
Tomoyuki, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.
- test/ruby/test_continuation.rb (tracing_with_set_trace_func): don't
call Continuation from other threads. [ruby-dev:45596] [Bug #6382]