diff options
author | Alasdair G Kergon <agk@redhat.com> | 2017-07-01 00:58:39 +0100 |
---|---|---|
committer | Alasdair G Kergon <agk@redhat.com> | 2017-07-01 00:58:39 +0100 |
commit | 17ed25409136162d091809d412596a45e0a30fd4 (patch) | |
tree | 5d67b4b4f7b7445681d9d9933919e86128461c6a /daemons/clvmd | |
parent | 006a9eaada2744ca39b05aed7b7bf152524580be (diff) | |
download | lvm2-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.c | 6 |
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(); |