[Ocfs2-tools-devel] [PATCH 3/8] o2cbtool: Disable signals when starting heartbeat

Sunil Mushran sunil.mushran at oracle.com
Thu Jun 23 15:17:46 PDT 2011


Disable signals while starting/stopping heartbeat and registering/unregistering
the cluster.

Signed-off-by: Sunil Mushran <sunil.mushran at oracle.com>
---
 o2cb_ctl/o2cbtool.c    |   11 +++++++++++
 o2cb_ctl/op_register.c |    6 ++++++
 o2cb_ctl/op_start.c    |    6 ++++++
 3 files changed, 23 insertions(+), 0 deletions(-)

diff --git a/o2cb_ctl/o2cbtool.c b/o2cb_ctl/o2cbtool.c
index 8307c77..a0b7462 100644
--- a/o2cb_ctl/o2cbtool.c
+++ b/o2cb_ctl/o2cbtool.c
@@ -226,6 +226,17 @@ static void parse_options(int argc, char *argv[], struct o2cb_command **cmd)
 	exit(1);
 }
 
+/* Call this with SIG_BLOCK to block and SIG_UNBLOCK to unblock */
+void o2cbtool_block_signals(int how)
+{
+     sigset_t sigs;
+
+     sigfillset(&sigs);
+     sigdelset(&sigs, SIGTRAP);
+     sigdelset(&sigs, SIGSEGV);
+     sigprocmask(how, &sigs, NULL);
+}
+
 errcode_t o2cbtool_init_cluster_stack(void)
 {
 	errcode_t ret;
diff --git a/o2cb_ctl/op_register.c b/o2cb_ctl/op_register.c
index 7ebfd2a..de0b312 100644
--- a/o2cb_ctl/op_register.c
+++ b/o2cb_ctl/op_register.c
@@ -276,6 +276,8 @@ errcode_t o2cbtool_register_cluster(struct o2cb_command *cmd)
 	errcode_t ret = -1;
 	gchar *clustername;
 
+	o2cbtool_block_signals(SIG_BLOCK);
+
 	if (cmd->o_argc < 2)
 		goto bail;
 
@@ -315,6 +317,7 @@ errcode_t o2cbtool_register_cluster(struct o2cb_command *cmd)
 
 	verbosef(VL_APP, "Cluster '%s' registered\n", clustername);
 bail:
+	o2cbtool_block_signals(SIG_UNBLOCK);
 	return ret;
 }
 
@@ -379,6 +382,8 @@ errcode_t o2cbtool_unregister_cluster(struct o2cb_command *cmd)
 	errcode_t ret = -1;
 	gchar *clustername;
 
+	o2cbtool_block_signals(SIG_BLOCK);
+
 	if (cmd->o_argc < 2)
 		goto bail;
 
@@ -415,5 +420,6 @@ errcode_t o2cbtool_unregister_cluster(struct o2cb_command *cmd)
 	verbosef(VL_APP, "Cluster '%s' unregistered\n", clustername);
 
 bail:
+	o2cbtool_block_signals(SIG_UNBLOCK);
 	return ret;
 }
diff --git a/o2cb_ctl/op_start.c b/o2cb_ctl/op_start.c
index 95c255e..88c47c9 100644
--- a/o2cb_ctl/op_start.c
+++ b/o2cb_ctl/op_start.c
@@ -133,6 +133,8 @@ static errcode_t start_global_heartbeat(O2CBCluster *cluster, char *clustername)
 	struct o2cb_device *od;
 	errcode_t ret;
 
+	o2cbtool_block_signals(SIG_BLOCK);
+
 	INIT_LIST_HEAD(&hbdevs);
 	ret = get_region_descs(cluster, &hbdevs);
 	if (ret)
@@ -152,6 +154,7 @@ static errcode_t start_global_heartbeat(O2CBCluster *cluster, char *clustername)
 		goto bail;
 
 bail:
+	o2cbtool_block_signals(SIG_UNBLOCK);
 	free_region_descs(&hbdevs, !!ret);
 	return ret;
 }
@@ -263,6 +266,8 @@ static errcode_t stop_global_heartbeat(O2CBCluster *cluster, char *clustername,
 	gchar **regions = NULL;
 	int i;
 
+	o2cbtool_block_signals(SIG_BLOCK);
+
 	ret = _fake_default_cluster_desc(&cluster_desc);
 	if (ret) {
 		tcom_err(ret, "while looking up the active cluster");
@@ -319,6 +324,7 @@ static errcode_t stop_global_heartbeat(O2CBCluster *cluster, char *clustername,
 	ret = 0;
 
 bail:
+	o2cbtool_block_signals(SIG_UNBLOCK);
 	if (regions)
 		o2cb_free_hb_regions_list(regions);
 	free(cluster_desc.c_stack);
-- 
1.7.4.1




More information about the Ocfs2-tools-devel mailing list