[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