* signal.cc (abort): Only flush streams after signal handler.

This commit is contained in:
Christopher Faylor 2008-06-09 13:45:59 +00:00
parent 7d6b567a4f
commit c230ba2a1c
2 changed files with 8 additions and 10 deletions

View File

@ -1,3 +1,7 @@
008-06-09 Eric Blake <ebb9@byu.net>
* signal.cc (abort): Only flush streams after signal handler.
2008-06-02 Christopher Faylor <me+cygwin@cgf.cx>
* cygwin.sc: Remove unrequired and erroneous definition.

View File

@ -324,16 +324,6 @@ abort (void)
{
_my_tls.incyg++;
sig_dispatch_pending ();
/* Flush all streams as per SUSv2.
From my reading of this document, this isn't strictly correct.
The streams are supposed to be flushed prior to exit. However,
if there is I/O in any signal handler that will not necessarily
be flushed.
However this is the way FreeBSD does it, and it is much easier to
do things this way, so... */
if (_GLOBAL_REENT->__cleanup)
_GLOBAL_REENT->__cleanup (_GLOBAL_REENT);
/* Ensure that SIGABRT can be caught regardless of blockage. */
sigset_t sig_mask;
sigfillset (&sig_mask);
@ -342,6 +332,10 @@ abort (void)
raise (SIGABRT);
_my_tls.call_signal_handler (); /* Call any signal handler */
/* Flush all streams as per SUSv2. */
if (_GLOBAL_REENT->__cleanup)
_GLOBAL_REENT->__cleanup (_GLOBAL_REENT);
do_exit (SIGABRT); /* signal handler didn't exit. Goodbye. */
}