]> code.delx.au - gnu-emacs/commitdiff
* emacs.c (fatal_error_signal): Unblock the signal before we try
authorJim Blandy <jimb@redhat.com>
Tue, 23 Feb 1993 14:18:00 +0000 (14:18 +0000)
committerJim Blandy <jimb@redhat.com>
Tue, 23 Feb 1993 14:18:00 +0000 (14:18 +0000)
to deliver it to ourselves. #include "syssignal.h" to get the
right definitions.

src/emacs.c

index 4dcdbc328e4548b3723b16f09fa70dc541d940e4..b33bb7fa447c33ee9ddd8917fca3f8874a37896a 100644 (file)
@@ -50,6 +50,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
 #include "intervals.h"
 
 #include "systty.h"
+#include "syssignal.h"
 
 #ifndef O_RDWR
 #define O_RDWR 2
@@ -125,17 +126,21 @@ fatal_error_signal (sig)
   signal (sig, SIG_DFL);
 
   /* If fatal error occurs in code below, avoid infinite recursion.  */
-  if (fatal_error_in_progress)
-    kill (getpid (), fatal_error_code);
-
-  fatal_error_in_progress = 1;
+  if (! fatal_error_in_progress)
+    {
+      fatal_error_in_progress = 1;
 
-  shut_down_emacs (sig);
+      shut_down_emacs (sig);
+    }
 
 #ifdef VMS
   LIB$STOP (SS$_ABORT);
 #else
-  /* Signal the same code; this time it will really be fatal.  */
+  /* Signal the same code; this time it will really be fatal.
+     Remember that since we're in a signal handler, the signal we're
+     going to send is probably blocked, so we have to unblock it if we
+     want to really receive it.  */
+  sigblock(SIGEMPTYMASK);
   kill (getpid (), fatal_error_code);
 #endif /* not VMS */
 }