[plt-scheme] Chaining exception handlers between threads
You can also set the `uncaught-exception-handler' parameter.
Matthew
At Mon, 25 Feb 2008 11:13:36 -0600, "Robby Findler" wrote:
> 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
> >
> _________________________________________________
> For list-related administrative tasks:
> http://list.cs.brown.edu/mailman/listinfo/plt-scheme