Re: [c++-pthreads] Restating the Jason model
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [c++-pthreads] Restating the Jason model
- To: Dave Butenhof <David.Butenhof@xxxxxx>
- Subject: Re: [c++-pthreads] Restating the Jason model
- From: Alexander Terekhov <boo@xxxxxxxxxxx>
- Date: Tue, 13 Jan 2004 14:28:45 +0100
Dave Butenhof wrote:
[...]
> >Anything else?
> >
> >
> Yes; but I don't yet know what it is. ;-)
2-phase EH (with fixed throw spec semantics) and "intelligent" cancel
request delivery. I thought you were in favor of it...
http://groups.google.com/groups?selm=3ec0f83b%40usenet01.boi.hp.com
<quote>
OK, fine. Let's standardize on a low-level exception support environment
with DETACHED 2-phase PC-mapped exceptions. On the first "search" phase,
the handler (if any) associated with each PC region that's active on the
call stack is presented (in order from most recent frame) with the cause of
the exception; say, a status code and arbitrary counted argument list. At
any point, a handler may determine that an UNWIND is necessary, targeting a
particular active stack frame. All handlers from the "inmost" out to that
frame's will be activated a second time with a status that indicates an
UNWIND is in progress. If the search phase reaches the base frame with no
unwind, then a core dump is taken. Only on the UNWIND phase should any
handler make actual changes in any program state, consistent with the
unwinding of that frame. Thus, cleanup occurs only when an UNWIND has been
ordered -- and of course it may also be conditionalized on the identity of
the exception that's unwinding.
This provides everything you need for your conditional "cleanup only if
unwind will occur" syntax, in C++ and/or C. It still provides sufficient
support for existing exception models like Ada and Modula-2+ that already
have 'finally' and depend on a traditional interpretation. (Having any of
these frames active will cause your conditional cleanup for any "inner
frame" to fire because there WILL be an unwind, but that's life.)
(What I've described, by the way, is essentially how the OpenVMS condition
handling facility has worked since 1977, though many users have always
ignored the unenforced recommendation that cleanup be done only on unwind.)
</quote>
regards,
alexander.