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.
50 lines
1.6 KiB
50 lines
1.6 KiB
7 years ago
|
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
|
||
|
|