[plt-scheme] Chaining exception handlers between threads

From: Matthew Flatt (mflatt at cs.utah.edu)
Date: Mon Feb 25 12:40:12 EST 2008

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


Posted on the users mailing list.