]> Zhao Yanbai Git Server - minix.git/commitdiff
A new panic that makes processes exit with PM knowing about it, instead
authorBen Gras <ben@minix3.org>
Mon, 17 Oct 2005 13:19:22 +0000 (13:19 +0000)
committerBen Gras <ben@minix3.org>
Mon, 17 Oct 2005 13:19:22 +0000 (13:19 +0000)
of sys_exit, so that PM functions (e.g. findproc) keep working properly,
and RS finds out about process deaths.

lib/sysutil/panic.c

index 6fa0bcf63e6feae9c43fb9fd8e812dfd6db83966..a3a479cea96b7ae08daa84ec95dec8569d22f9b7 100644 (file)
@@ -1,3 +1,5 @@
+#include <stdlib.h>
+
 #include "sysutil.h"
 
 /*===========================================================================*
@@ -13,6 +15,7 @@ int num;                      /* number to go with format string */
  * value of a defined constant.
  */
   message m;
+  void (*suicide)(void);
   if (NULL != who && NULL != mess) {
       if (num != NO_NUM) {
           printf("Panic in %s: %s: %d\n", who, mess, num); 
@@ -21,8 +24,16 @@ int num;                     /* number to go with format string */
       }
   }
 
-  m.PR_PROC_NR = SELF;
-  _taskcall(SYSTASK, SYS_EXIT, &m);
-  /* never reached */
+  /* Exit nicely through PM. */
+  exit(1);
+
+  /* If exiting nicely through PM fails for some reason, try to
+   * commit suicide. E.g., message to PM might fail due to deadlock.
+   */
+  suicide = (void (*)(void)) -1;
+  suicide();
+
+  /* If committing suicide fails for some reason, hang. */
+  for(;;) { }
 }