You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
49 lines
1.6 KiB
49 lines
1.6 KiB
From dae4f53acb269219e876c229c8f034fcdaf3ff5a Mon Sep 17 00:00:00 2001 |
|
From: Zdenek Kabelac <zkabelac@redhat.com> |
|
Date: Sat, 4 Feb 2017 14:47:27 +0100 |
|
Subject: [PATCH] clvmd: add mutex protection for cpg_ call |
|
|
|
The library for corosync multicasting is not supporting multithread |
|
usage - add local mutex to avoid parallel call of cpg_mcast_joined(). |
|
--- |
|
WHATS_NEW | 1 + |
|
daemons/clvmd/clvmd-corosync.c | 4 ++++ |
|
2 files changed, 5 insertions(+) |
|
|
|
diff --git a/WHATS_NEW b/WHATS_NEW |
|
index 8ae2df8..0b571ae 100644 |
|
--- a/WHATS_NEW |
|
+++ b/WHATS_NEW |
|
@@ -1,5 +1,6 @@ |
|
Version 2.02.169 - |
|
===================================== |
|
+ Avoid parallel usage of cpg_mcast_joined() in clvmd with corosync. |
|
Fix segfault in lvmetad from missing NULL in daemon_reply_simple. |
|
|
|
Version 2.02.167 - |
|
diff --git a/daemons/clvmd/clvmd-corosync.c b/daemons/clvmd/clvmd-corosync.c |
|
index 05c9882..2227cbf 100644 |
|
--- a/daemons/clvmd/clvmd-corosync.c |
|
+++ b/daemons/clvmd/clvmd-corosync.c |
|
@@ -532,6 +532,7 @@ static int _cluster_fd_callback(struct local_client *fd, char *buf, int len, |
|
static int _cluster_send_message(const void *buf, int msglen, const char *csid, |
|
const char *errtext) |
|
{ |
|
+ static pthread_mutex_t _mutex = PTHREAD_MUTEX_INITIALIZER; |
|
struct iovec iov[2]; |
|
cs_error_t err; |
|
int target_node; |
|
@@ -546,7 +547,10 @@ static int _cluster_send_message(const void *buf, int msglen, const char *csid, |
|
iov[1].iov_base = (char *)buf; |
|
iov[1].iov_len = msglen; |
|
|
|
+ pthread_mutex_lock(&_mutex); |
|
err = cpg_mcast_joined(cpg_handle, CPG_TYPE_AGREED, iov, 2); |
|
+ pthread_mutex_unlock(&_mutex); |
|
+ |
|
return cs_to_errno(err); |
|
} |
|
|
|
-- |
|
1.8.3.1 |
|
|
|
|