]> andersk Git - moira.git/blobdiff - lib/critical.c
Added copyright message; log deadlock errors; use exclusive readlocks
[moira.git] / lib / critical.c
index 583d3de532ad0af9775e925e5ea871c74a78fc4a..b4f63c2776dc7891267fe03ec0180a60e0467c6a 100644 (file)
@@ -1,8 +1,13 @@
 /* $Header$
  *
  * Log and send a zephyrgram about any critical errors.
+ *
+ *  (c) Copyright 1988 by the Massachusetts Institute of Technology.
+ *  For copying and distribution information, please see the file
+ *  <mit-copyright.h>.
  */
 
+#include <mit-copyright.h>
 #include <stdio.h>
 #include <sys/file.h>
 #include <zephyr/zephyr.h>
@@ -14,6 +19,8 @@
 /* mode to create the file with */
 #define LOGFILEMODE    0644
 
+extern char *whoami;
+
 
 void critical_alert(instance, msg, args)
   char *instance;              /* Instance for zephyr gram */
@@ -21,12 +28,13 @@ void critical_alert(instance, msg, args)
                                /* args = arguements, printf style */
   /* This routine sends a class SMS zephyrgram of specified instance
      and logs to a special logfile the message passed to it via msg
-     and args in printf format. */
+     and args in printf format.  *** It expects the global variable
+     whoami to be defined and contain the name of the calling program. */
   /* Note: The part of this code that process the variable arguements
      was stolen from sprintf(). */
 {
     FILE _bufstr;              /* For _doprnt() */
-    int crit;                  /* File descriptor for critical log file */
+    FILE *crit;                        /* FILE for critical log file */
     char buf[BUFSIZ];          /* Holds the formatted message */
 
     /* Put the fully formatted message into buf */
@@ -40,12 +48,20 @@ void critical_alert(instance, msg, args)
     send_zgram(instance, buf);
 
     /* Log message to critical file */
-    if ((crit = open(CRITERRLOG, 
-                    O_WRONLY | O_APPEND | O_CREAT, LOGFILEMODE)) >= 0)
+    if ((crit = fopen(CRITERRLOG, "a")) != (FILE *)NULL) 
     {
-       write(crit,buf,strlen(buf));
-       close(crit);
+       long t;
+       char  *time_s;
+
+       time(&t);
+       time_s = ctime(&t) + 4;
+       time_s[strlen(time_s)-6] = '\0';
+
+       fprintf(crit, "%s <%d> %s\n", time_s, getpid(), buf);
+       fclose(crit);
     }
+
+    com_err(whoami, 0, buf);
 }
 
 
This page took 0.032415 seconds and 4 git commands to generate.