]> Zhao Yanbai Git Server - minix.git/commitdiff
tweak to panic functions of mfs and vfs.
authorBen Gras <ben@minix3.org>
Tue, 23 Oct 2007 14:17:51 +0000 (14:17 +0000)
committerBen Gras <ben@minix3.org>
Tue, 23 Oct 2007 14:17:51 +0000 (14:17 +0000)
  . print newline
  . when recursive panic detected, don't simply return, confusing
    the caller, but print a diagnostic and exit
  . don't call sys_exit as this may confuse PM; it should be OK
    to call PM exit() nowadays.

servers/mfs/utility.c
servers/vfs/utility.c

index 0eda1994ff6608a7d637db8d29ff64d68155b0c4..f4af5cfd844872e4718a0c3de6ee23f1c75a0e9a 100644 (file)
@@ -4,6 +4,7 @@
 #include <string.h>
 #include <minix/com.h>
 #include <minix/callnr.h>
+#include <stdlib.h>
 
 #include "buf.h"
 #include "inode.h"
@@ -35,13 +36,15 @@ int num;                    /* number to go with it */
  * inconsistency is detected, e.g., a programming error or illegal value of a
  * defined constant.
  */
-  if (panicking) return;       /* do not panic during a sync */
-  panicking = TRUE;            /* prevent another panic during the sync */
+  if (!panicking) {            /* do not panic during a sync */
+       panicking = TRUE;               /* prevent another panic during the sync */
 
-  printf("FS panic (%s): %s ", who, mess);
-  if (num != NO_NUM) printf("%d",num); 
-  (void) fs_sync();            /* flush everything to the disk */
-  sys_exit(SELF);
+       printf("MFS panic (%s): %s ", who, mess);
+       if (num != NO_NUM) printf("%d",num); 
+       printf("\n"); 
+       (void) fs_sync();               /* flush everything to the disk */
+  } else printf("MFS re-panic\n");
+  exit(1);
 }
 
 /*===========================================================================*
index a3e893409533f37f00d8d280cb9dbdf6212cfd30..8e62473f0801f84fd26f186cd333a428da7d3b70 100644 (file)
@@ -88,27 +88,24 @@ PUBLIC int no_sys()
 }
 
 /*===========================================================================*
- *                             panic                                        *
+ *                              panic                                        *
  *===========================================================================*/
 PUBLIC void panic(who, mess, num)
-char *who;                     /* who caused the panic */
-char *mess;                    /* panic message string */
-int num;                       /* number to go with it */
+char *who;                      /* who caused the panic */
+char *mess;                     /* panic message string */
+int num;                        /* number to go with it */
 {
-/* Something awful has happened.  Panics are caused when an internal
- * inconsistency is detected, e.g., a programming error or illegal value of a
- * defined constant.
- */
-  if (panicking) return;       /* do not panic during a sync */
-  panicking = TRUE;            /* prevent another panic during the sync */
-
-  printf("VFS panic (%s): %s ", who, mess);
-  if (num != NO_NUM) printf("%d",num); 
-  (void) do_sync();            /* flush everything to the disk */
-  sys_exit(SELF);
+  if (!panicking) {             /* do not panic during a sync */
+        panicking = TRUE;       /* prevent another panic during the sync */
+
+        printf("VFS panic (%s): %s ", who, mess);
+        if (num != NO_NUM) printf("%d",num); 
+        printf("\n"); 
+        (void) do_sync();               /* flush everything to the disk */
+  } else printf("VFS re-panic\n");
+  exit(1);
 }
 
-
 /*===========================================================================*
  *                             isokendpt_f                                  *
  *===========================================================================*/