X-Git-Url: http://git.imager.perl.org/imager.git/blobdiff_plain/517c350007ddb6dea80342456b27a981fb6fc809..e1c0692925:/log.c diff --git a/log.c b/log.c index ebcb9a0d..efc604c1 100644 --- a/log.c +++ b/log.c @@ -13,6 +13,8 @@ #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); @@ -24,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); @@ -93,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); @@ -103,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 @@ -110,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); @@ -122,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); @@ -141,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; }