Blame SOURCES/0001-Fix-sbd-cluster-finalize-cmap-connection-if-disconne.patch

29e83d
From f8f980340256ab5bef5385cd3bc082fdfb7613ed Mon Sep 17 00:00:00 2001
29e83d
From: "Gao,Yan" <ygao@suse.com>
29e83d
Date: Thu, 7 Mar 2019 15:01:26 +0100
29e83d
Subject: [PATCH] Fix: sbd-cluster: finalize cmap connection if disconnected
29e83d
 from cluster
29e83d
29e83d
Previously if sbd cluster servant anyhow got dis-/reconnected from the
29e83d
cluster, it'd start hogging CPU keeping polling the main loop source
29e83d
from the old cmap connection.
29e83d
---
29e83d
 src/sbd-cluster.c | 38 ++++++++++++++++++++++++++------------
29e83d
 1 file changed, 26 insertions(+), 12 deletions(-)
29e83d
29e83d
diff --git a/src/sbd-cluster.c b/src/sbd-cluster.c
29e83d
index 51bb456..541212f 100644
29e83d
--- a/src/sbd-cluster.c
29e83d
+++ b/src/sbd-cluster.c
29e83d
@@ -174,6 +174,25 @@ cmap_dispatch_callback (gpointer user_data)
29e83d
     return TRUE;
29e83d
 }
29e83d
 
29e83d
+static void
29e83d
+cmap_destroy(void)
29e83d
+{
29e83d
+    if (cmap_source) {
29e83d
+        g_source_destroy(cmap_source);
29e83d
+        cmap_source = NULL;
29e83d
+    }
29e83d
+
29e83d
+    if (track_handle) {
29e83d
+        cmap_track_delete(cmap_handle, track_handle);
29e83d
+        track_handle = 0;
29e83d
+    }
29e83d
+
29e83d
+    if (cmap_handle) {
29e83d
+        cmap_finalize(cmap_handle);
29e83d
+        cmap_handle = 0;
29e83d
+    }
29e83d
+}
29e83d
+
29e83d
 static gboolean
29e83d
 sbd_get_two_node(void)
29e83d
 {
29e83d
@@ -217,18 +236,7 @@ sbd_get_two_node(void)
29e83d
     return TRUE;
29e83d
 
29e83d
 out:
29e83d
-    if (cmap_source) {
29e83d
-        g_source_destroy(cmap_source);
29e83d
-        cmap_source = NULL;
29e83d
-    }
29e83d
-    if (track_handle) {
29e83d
-        cmap_track_delete(cmap_handle, track_handle);
29e83d
-        track_handle = 0;
29e83d
-    }
29e83d
-    if (cmap_handle) {
29e83d
-        cmap_finalize(cmap_handle);
29e83d
-        cmap_handle = 0;
29e83d
-    }
29e83d
+    cmap_destroy();
29e83d
 
29e83d
     return FALSE;
29e83d
 }
29e83d
@@ -327,6 +335,12 @@ sbd_membership_destroy(gpointer user_data)
29e83d
 {
29e83d
     cl_log(LOG_WARNING, "Lost connection to %s", name_for_cluster_type(get_cluster_type()));
29e83d
 
29e83d
+    if (get_cluster_type() != pcmk_cluster_unknown) {
29e83d
+#if SUPPORT_COROSYNC && CHECK_TWO_NODE
29e83d
+        cmap_destroy();
29e83d
+#endif
29e83d
+    }
29e83d
+
29e83d
     set_servant_health(pcmk_health_unclean, LOG_ERR, "Cluster connection terminated");
29e83d
     notify_parent();
29e83d
 
29e83d
-- 
29e83d
1.8.3.1
29e83d