[plt-scheme] Chaining exception handlers between threads
It is probably easiest to propogate the exceptions yourself:
(thread (lambda () (with-handlers ((exn? (lambda (e) (channel-put
exn-chan e)))) ...whatever you were going to do...)))
and then have the main thread wait on the exn-chan.
If the main thread was doing useful separately from the other threads,
and you want to interrupt it somehow, I'd suggest not doing that, but
instead moving that work to a new child thread, but you may have other
reasons that that won't work, so a few more details might help.
Robby
On Mon, Feb 25, 2008 at 11:05 AM, Noel Welsh <noelwelsh at gmail.com> wrote:
> Hello,
>
> I want to install an exception handler around a number of threads (so
> a simple use of call-in-nested-thread will not work). More precisely,
> I want any exception in my threads to kill all the threads and then
> raise an exception in the parent thread. I'm not sure how to
> propagate the exn from the child thread to the parent. The obvious
> solution doesn't work:
>
> > (with-handlers ([exn? (lambda (e) (display "got it!"))]) (thread (lambda () (error "died"))))
> #<thread>
> > died
>
> Do I have to write the communication by hand?
>
> I think this bit of information has fallen through the gaps in
> documenting threads, exception, and parameters -- but I'm happy to be
> pointed to the page that proves me wrong!
>
> N.
> _________________________________________________
> For list-related administrative tasks:
> http://list.cs.brown.edu/mailman/listinfo/plt-scheme
>