#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);
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);
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);
aIMCTX->filename, aIMCTX->line, level);
vfprintf(aIMCTX->lg_file, fmt, ap);
fflush(aIMCTX->lg_file);
+
+ i_mutex_unlock(log_mutex);
}
void
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);
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);
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;
}