[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: racing srfi-18 threads
From: |
Neil Jerram |
Subject: |
Re: racing srfi-18 threads |
Date: |
Mon, 16 Nov 2009 22:16:31 +0000 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/23.1 (gnu/linux) |
Neil Jerram <address@hidden> writes:
> Tristan Colgate <address@hidden> 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