summaryrefslogtreecommitdiff
path: root/daemons/clvmd
diff options
context:
space:
mode:
authorAlasdair G Kergon <agk@redhat.com>2017-07-01 00:58:39 +0100
committerAlasdair G Kergon <agk@redhat.com>2017-07-01 00:58:39 +0100
commit17ed25409136162d091809d412596a45e0a30fd4 (patch)
tree5d67b4b4f7b7445681d9d9933919e86128461c6a /daemons/clvmd
parent006a9eaada2744ca39b05aed7b7bf152524580be (diff)
downloadlvm2-17ed25409136162d091809d412596a45e0a30fd4.tar.gz
clvmd: add debuglog mutex
Log messages issued by different threads occasionally got intertwined.
Diffstat (limited to 'daemons/clvmd')
-rw-r--r--daemons/clvmd/clvmd.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/daemons/clvmd/clvmd.c b/daemons/clvmd/clvmd.c
index dcc986ba6..0f96356d3 100644
--- a/daemons/clvmd/clvmd.c
+++ b/daemons/clvmd/clvmd.c
@@ -92,6 +92,7 @@ static const size_t STACK_SIZE = 128 * 1024;
static pthread_attr_t stack_attr;
static int lvm_thread_exit = 0;
static pthread_mutex_t lvm_thread_mutex;
+static pthread_mutex_t _debuglog_mutex;
static pthread_cond_t lvm_thread_cond;
static pthread_barrier_t lvm_start_barrier;
static struct dm_list lvm_cmd_head;
@@ -218,14 +219,17 @@ void debuglog(const char *fmt, ...)
switch (clvmd_get_debug()) {
case DEBUG_STDERR:
+ pthread_mutex_lock(&_debuglog_mutex);
va_start(ap,fmt);
time(&P);
fprintf(stderr, "CLVMD[%x]: %.15s ", (int)pthread_self(), ctime_r(&P, buf_ctime) + 4);
vfprintf(stderr, fmt, ap);
va_end(ap);
fflush(stderr);
+ pthread_mutex_unlock(&_debuglog_mutex);
break;
case DEBUG_SYSLOG:
+ pthread_mutex_lock(&_debuglog_mutex);
if (!syslog_init) {
openlog("clvmd", LOG_PID, LOG_DAEMON);
syslog_init = 1;
@@ -234,6 +238,7 @@ void debuglog(const char *fmt, ...)
va_start(ap,fmt);
vsyslog(LOG_DEBUG, fmt, ap);
va_end(ap);
+ pthread_mutex_unlock(&_debuglog_mutex);
break;
case DEBUG_OFF:
break;
@@ -522,6 +527,7 @@ int main(int argc, char *argv[])
exit(1);
}
pthread_mutex_init(&lvm_thread_mutex, NULL);
+ pthread_mutex_init(&_debuglog_mutex, NULL);
pthread_cond_init(&lvm_thread_cond, NULL);
pthread_barrier_init(&lvm_start_barrier, NULL, 2);
init_lvhash();