From: Young Hyun Date: 2006-08-25T02:56:43+09:00 Subject: continuation called across trap Does anyone know what the rather mysterious error "continuation called across trap" means? It's triggered when I use SyncEnumerator in a multithreaded script. I don't believe I'm doing anything obviously wrong with threads, but this error disappears if I don't use threads. Furthermore, the error seems to occur when I use irb but not ruby (?? I need to verify this). I'm suspecting there might be a bug in irb. Code to reproduce the problem is below. Note, also, that the problem disappears if you remove the use of @values.find--that is, if you call SyncEnumerator.each directly in the lambda. --Young ============================================= require 'thread' require 'generator' class Region def initialize @values = [] @work_queue = Queue.new @thread = Thread.new do loop do @work_queue.deq.call end end end def add(value) @work_queue << lambda do @values << value end end def find(template) @work_queue << lambda do @values.find do |value| SyncEnumerator.new(template, value).each do |lhs, rhs| puts "checking: #{lhs.inspect} === #{rhs.inspect}" end end end end end Thread.abort_on_exception = true reg = Region.new reg.add [1,1] reg.add [1,2] reg.add [1,3] reg.find [1,2] #sleep 10 # uncommenting this somehow prevents the error ============================================= MacOS X 10.4.7 $ ruby --version ruby 1.8.4 (2005-12-24) [powerpc-darwin8.5.0] $ irb --prompt-mode simple >> load 'Fail4.rb' checking: 1 === 1=> true >> /opt/local/lib/ruby/1.8/generator.rb:132:in `call': continuation called across trap (RuntimeError) from /opt/local/lib/ruby/1.8/generator.rb:132:in `next' from /opt/local/lib/ruby/1.8/generator.rb:225:in `each' from /opt/local/lib/ruby/1.8/generator.rb:220:in `each' from /opt/local/lib/ruby/1.8/generator.rb:217:in `each' from ./Fail4.rb:25:in `find' from ./Fail4.rb:2:in `find' from ./Fail4.rb:24:in `find' from ./Fail4.rb:11:in `initialize' from ./Fail4.rb:10:in `initialize' from ./Fail4.rb:9:in `initialize' from ./Fail4.rb:36 from (irb):1:in `irb_binding' from /opt/local/lib/ruby/1.8/irb/workspace.rb:52:in `irb_binding' from /opt/local/lib/ruby/1.8/irb/workspace.rb:52