summaryrefslogtreecommitdiffhomepage
path: root/src/log.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/log.c')
-rw-r--r--src/log.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/log.c b/src/log.c
index f85d29d..0ed686b 100644
--- a/src/log.c
+++ b/src/log.c
@@ -29,6 +29,7 @@
#include "utils.h"
#include "vector.h"
#include "conf.h"
+#include <pthread.h>
static const char *syslog_level[] = {
NULL,
@@ -45,6 +46,8 @@ static const char *syslog_level[] = {
#define TIME_LENGTH 16
#define STRING_LENGTH 800
+static pthread_mutex_t log_mutex = PTHREAD_MUTEX_INITIALIZER;
+
/*
* Global file descriptor for the log file
*/
@@ -165,12 +168,14 @@ void log_message (int level, const char *fmt, ...)
goto out;
if (config.syslog) {
+ pthread_mutex_lock(&log_mutex);
#ifdef HAVE_VSYSLOG_H
vsyslog (level, fmt, args);
#else
vsnprintf (str, STRING_LENGTH, fmt, args);
syslog (level, "%s", str);
#endif
+ pthread_mutex_unlock(&log_mutex);
} else {
char *p;
@@ -196,7 +201,10 @@ void log_message (int level, const char *fmt, ...)
assert (log_file_fd >= 0);
+ pthread_mutex_lock(&log_mutex);
ret = write (log_file_fd, str, strlen (str));
+ pthread_mutex_unlock(&log_mutex);
+
if (ret == -1) {
config.syslog = TRUE;
@@ -207,7 +215,10 @@ void log_message (int level, const char *fmt, ...)
"Falling back to syslog logging");
}
+ pthread_mutex_lock(&log_mutex);
fsync (log_file_fd);
+ pthread_mutex_unlock(&log_mutex);
+
}
out: