]> git.imager.perl.org - imager.git/blobdiff - log.c
avoid a possible sign-extension for offsets/sizes in SGI
[imager.git] / log.c
diff --git a/log.c b/log.c
index 34e4a73751619c946387d3b8a155a111fe6e86e5..efc604c1d576c7a0cad3f3dc13cee8d93b049c83 100644 (file)
--- a/log.c
+++ b/log.c
 #define DTBUFF 50
 #define DATABUFF DTBUFF+3+10+1+5+1+1
 
-#if 0
-static int   log_level   = 0;
-static FILE *lg_file     = NULL;
-static char  date_buffer[DTBUFF];
-static char  data_buffer[DATABUFF];
-#endif
-
 #define LOG_DATE_FORMAT "%Y/%m/%d %H:%M:%S"
 
+static i_mutex_t log_mutex;
+
 static void
 im_vloog(pIMCTX, int level, const char *fmt, va_list ap);
 
@@ -31,6 +26,10 @@ int
 im_init_log(pIMCTX, const char* name,int level) {
   i_clear_error();
 
+  if (!log_mutex) {
+    log_mutex = i_mutex_new();
+  }
+
   if (aIMCTX->lg_file) {
     if (aIMCTX->own_log)
       fclose(aIMCTX->lg_file);
@@ -100,8 +99,10 @@ im_vloog(pIMCTX, int level, const char *fmt, va_list ap) {
   struct tm *str_tm;
   char date_buffer[DTBUFF];
 
-  if (!aIMCTX->lg_file || level > aIMCTX->log_level)
+  if (!aIMCTX || !aIMCTX->lg_file || level > aIMCTX->log_level)
     return;
+
+  i_mutex_lock(log_mutex);
   
   timi = time(NULL);
   str_tm = localtime(&timi);
@@ -110,6 +111,8 @@ im_vloog(pIMCTX, int level, const char *fmt, va_list ap) {
          aIMCTX->filename, aIMCTX->line, level);
   vfprintf(aIMCTX->lg_file, fmt, ap);
   fflush(aIMCTX->lg_file);
+
+  i_mutex_unlock(log_mutex);
 }
 
 void
@@ -117,7 +120,7 @@ i_loog(int level,const char *fmt, ... ) {
   dIMCTX;
   va_list ap;
 
-  if (!aIMCTX->lg_file || level > aIMCTX->log_level)
+  if (!aIMCTX || !aIMCTX->lg_file || level > aIMCTX->log_level)
     return;
 
   va_start(ap,fmt);
@@ -129,7 +132,7 @@ void
 im_loog(pIMCTX, int level,const char *fmt, ... ) {
   va_list ap;
 
-  if (!aIMCTX->lg_file || level > aIMCTX->log_level)
+  if (!aIMCTX || !aIMCTX->lg_file || level > aIMCTX->log_level)
     return;
 
   va_start(ap,fmt);
@@ -148,7 +151,7 @@ This is an internal function called by the mm_log() macro.
 
 void
 im_lhead(pIMCTX, const char *file, int line) {
-  if (aIMCTX->lg_file != NULL) {
+  if (aIMCTX && aIMCTX->lg_file != NULL) {
     aIMCTX->filename = file;
     aIMCTX->line = line;
   }