Neil Jerram <n...@ossau.uklinux.net> writes: > Tristan Colgate <tcolg...@gmail.com> writes: > >> A similar, though much simpler, test case exhibits the same problem. >> I'll raise a bug. report and >> include a log of the issue. > > Hi Tristan, > > Thanks for reporting this. FWIW I've checked that it still happens > (exactly as you've described) with the current Git HEAD. Not much clue > yet about the underlying problem or fix, but I'll keep looking.
What happens is that each of the spawned threads throws an exception before it gets going. If I run test-broken in the (srfi srfi-18) module, with the following code added at the end: (write threads) (newline) (for-each (lambda (t) (write (thread->exception t)) (newline)) threads) (for-each thread-join! threads) I see: =============== build thread build thread build thread build thread build thread build thread (#<thread 3081010064 (8d308a0)> #<thread 3064224656 (8d305c0)> #<thread 3064224656 (8d30450)> #<thread 3064224656 (8d302e0)> #<thread 3064224656 (8d30170)> #<thread 3064224656 (8d30000)>) ((uncaught-exception) wrong-type-arg "with-exception-handler" "Wrong type argument: ~S" (#<program 8e13ac0>) ()) ((uncaught-exception) wrong-type-arg "with-exception-handler" "Wrong type argument: ~S" (#<program 8e13a00>) ()) ((uncaught-exception) wrong-type-arg "with-exception-handler" "Wrong type argument: ~S" (#<program 8e13940>) ()) ((uncaught-exception) wrong-type-arg "with-exception-handler" "Wrong type argument: ~S" (#<program 8e13890>) ()) ((uncaught-exception) wrong-type-arg "with-exception-handler" "Wrong type argument: ~S" (#<program 8e13800>) ()) ((uncaught-exception) wrong-type-arg "with-exception-handler" "Wrong type argument: ~S" (#<program 8e13740>) ()) =============== This is apparently because of srfi-18.scm's `with-exception-handler' including (check-arg-type thunk? thunk "with-exception-handler") It seems that when run under the VM, (thunk? thunk) => #f. scm_thunk_p depends on scm_i_program_arity, which depends on scm_program_arities, and adding this - (write ((@ (system vm program) program-arities) thunk)) (newline) (write (procedure-property thunk 'arity)) (newline) - into srfi-18's make-thread code, I get #f #f every time. So I think this is a good point to report and ask if this makes sense. Andy / Ludo, can it be correct for (program-arities PROGRAM) to be #f ? If not, any idea what is the root cause of this? Another question here is why the thread-join! doesn't cause the uncaught thread exceptions to be raised on the main thread. I'll look further into that. Thanks, Neil