$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Beman Dawes (bdawes_at_[hidden])
Date: 2003-09-26 15:20:30
At 08:40 AM 9/26/2003, David Abrahams wrote:
 > ... discussion of SEH cases ...
Let me try to summarize your points, to make sure I understand them:
(1) Exceptions (and signals) from the operating system may come at times 
when the C++ exception handling mechanism is unprepared to unwind the 
stack. For example, in a nothrow region such as a destructor.
(2) Because of (1), such operating system exceptions or signals should not 
be trapped and converted to a C++ exception throw. To do so risks serious 
failure.
(3) It is useful, however, to call logging or stackdump facilities, and 
then to terminate the program. ( But sometimes, such as during interactive 
debugging, trapping to the debugger would be the most useful action.)
Is that summary correct (although much simplified)?
It doesn't seem that (3) is always safe. The problem may have occurred in 
one of the logging or stackdump facilities themselves, for example. Calling 
them again might cause a loop. That could be protected against by a static 
"been_here_before" bool set the first time through. If it is true (the 
second time around), just terminate without any log/dump attempt.
How should "terminate the program" be implemented? std::abort()? Remember 
that a major objective of catching the structured exception or signal in 
the first place was to ensure a non-zero return value from the program 
(rather than getting a dialog box or some other non-useful behavior).
--Beman