verbose: Ensure mutual exclusion when logging
authorJosé Bollo <jose.bollo@iot.bzh>
Wed, 1 Nov 2017 12:32:44 +0000 (13:32 +0100)
committerJosé Bollo <jose.bollo@iot.bzh>
Wed, 1 Nov 2017 12:32:44 +0000 (13:32 +0100)
Change-Id: I3ccc2ba35ee8db3d62eb229c736e65b2305184e3
Signed-off-by: José Bollo <jose.bollo@iot.bzh>
src/verbose.c

index f330c6f..e96627e 100644 (file)
@@ -85,6 +85,7 @@ void verbose_set_name(const char *name, int authority)
 #include <errno.h>
 #include <string.h>
 #include <sys/uio.h>
+#include <pthread.h>
 
 static const char *appname;
 
@@ -105,6 +106,8 @@ static int tty;
 
 static const char chars[] = { '\n', '?', ':', ' ', '[', ',', ']' };
 
+static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
+
 static void _vverbose_(int loglevel, const char *file, int line, const char *function, const char *fmt, va_list args)
 {
        char buffer[4000];
@@ -169,7 +172,9 @@ static void _vverbose_(int loglevel, const char *file, int line, const char *fun
        iov[n].iov_base = (void*)&chars[0];
        iov[n++].iov_len = 1;
 
+       pthread_mutex_lock(&mutex);
        writev(STDERR_FILENO, iov, n);
+       pthread_mutex_unlock(&mutex);
 
        errno = saverr;
 }