Coroutines and exceptions

Daniel Keep daniel.keep.lists at gmail.com
Fri Apr 28 22:45:05 PDT 2006


Oops, forgot I was playing around with the gdc-compiled binary, not the
dmd one :P  Had a poke around a dmd-generated executable in windbg, but
couldn't actually find anything relating to exception handlers.  In any
case, the question still stands :)

	-- Daniel

Daniel Keep wrote:
> Hi.
> 
> I've been playing around with an implementation of coroutines in D the
> last day or two, and I've got it to the point where it works pretty well
> under gdc, and under dmd with a few bugs to track down.  But I've hit a
> brick will with exceptions.
> 
> See, I was kinda hoping that D found exception handlers by going back up
> the stack frames... although after pouring over the disassembly in gdb,
> it looks like D registers the exception handlers as it meets them.
> 
> The problem with this is that the coroutine library allows you to jump
> from one part of the code to another, which ends up screwing up the
> order of exception handlers.  For example (simplified, mind you):
> 
> void coro_a()
> {
>     try
>     {
>     	co_call(main); // Jump back into main just after co_call
>     }
>     except( Exception e )
>     {
>         writefln("Exception in coro_a: %s", e.toString());
>     }
> }
> 
> void main()
> {
>     try
>     {
>         co_call(coro_a); // Jump into coro_a
>         throw new Exception("Oh noes!");
>     }
>     catch( Exception e )
>     {
>         writefln("Exception in main: %s", e.toString());
>     }
> }
> 
> If you run that, you end up getting "Exception in coro_a: Oh noes!"
> instead of "Exception in main: Oh noes!" as you would expect.
> 
> This is pretty much a show-stopper for coroutines; if exceptions don't
> work with them, then the library won't be much good.
> 
> SO, the question is: assuming that you register exception handlers on to
> some kind of internal stack of addresses to jump to in the event of an
> exception, is there any possibility of being able to, say... swap out
> that stack for a different one at runtime?
> 
> The CPU doesn't seem to mind when I do that to the program stack :P
> 
> Please and thankyou,
> 
> 	-- Daniel Keep
> 

-- 

v1sw5+8Yhw5ln4+5pr6OFma8u6+7Lw4Tm6+7l6+7D
a2Xs3MSr2e4/6+7t4TNSMb6HTOp5en5g6RAHCP    http://hackerkey.com/



More information about the Digitalmars-d mailing list