summaryrefslogtreecommitdiffstats
path: root/ctdb/server/eventscript.c
diff options
context:
space:
mode:
authorRonnie Sahlberg <ronniesahlberg@gmail.com>2009-10-28 17:35:15 +1100
committerRonnie Sahlberg <ronniesahlberg@gmail.com>2009-10-28 17:35:15 +1100
commitd379b30182eaa4d165d274866076de092719e18e (patch)
treed2492c51a85e87f0ed4c1f44359c78c31769ac37 /ctdb/server/eventscript.c
parentf8a8c0d6e477f3dd6fe961764e86435033e2a3b3 (diff)
downloadsamba-d379b30182eaa4d165d274866076de092719e18e.tar.gz
samba-d379b30182eaa4d165d274866076de092719e18e.tar.xz
samba-d379b30182eaa4d165d274866076de092719e18e.zip
create a separate context for non-monitor eventscripts so they dont collide
(This used to be ctdb commit 325de818f88f339a16dc4544e899a2d735933c44)
Diffstat (limited to 'ctdb/server/eventscript.c')
-rw-r--r--ctdb/server/eventscript.c31
1 files changed, 21 insertions, 10 deletions
diff --git a/ctdb/server/eventscript.c b/ctdb/server/eventscript.c
index 059094abb3..9711ebaabe 100644
--- a/ctdb/server/eventscript.c
+++ b/ctdb/server/eventscript.c
@@ -736,7 +736,7 @@ static void ctdb_event_script_timeout(struct event_context *ev, struct timed_eve
}
}
- if (monitoring_status != NULL) {
+ if ((!strcmp(options, "monitor")) && (monitoring_status != NULL)) {
struct ctdb_monitor_script_status *script;
script = monitoring_status->scripts;
@@ -788,11 +788,19 @@ static int ctdb_event_script_callback_v(struct ctdb_context *ctdb,
struct ctdb_event_script_state *state;
int ret;
- if (ctdb->script_monitor_ctx != NULL) {
- talloc_free(ctdb->script_monitor_ctx);
- ctdb->script_monitor_ctx = NULL;
+ if (!strcmp(fmt, "monitor")) {
+ if (ctdb->script_monitor_ctx != NULL) {
+ talloc_free(ctdb->script_monitor_ctx);
+ ctdb->script_monitor_ctx = NULL;
+ }
+ monitoring_status = talloc_zero(ctdb, struct ctdb_monitor_status);
+ } else {
+ if (ctdb->event_script_ctx == NULL) {
+ ctdb->event_script_ctx = talloc_zero(ctdb, struct ctdb_monitor_status);
+ }
+ monitoring_status = ctdb->event_script_ctx;
}
- monitoring_status = talloc_zero(ctdb, struct ctdb_monitor_status);
+
if (monitoring_status == NULL) {
DEBUG(DEBUG_ERR, (__location__ " ERROR: Failed to talloc script_monitoring context\n"));
return -1;
@@ -801,7 +809,6 @@ static int ctdb_event_script_callback_v(struct ctdb_context *ctdb,
state = talloc(monitoring_status, struct ctdb_event_script_state);
if (state == NULL) {
DEBUG(DEBUG_ERR,(__location__ " could not allocate state\n"));
- talloc_free(monitoring_status);
return -1;
}
monitoring_status->state = state;
@@ -814,7 +821,7 @@ static int ctdb_event_script_callback_v(struct ctdb_context *ctdb,
state->te = NULL;
if (state->options == NULL) {
DEBUG(DEBUG_ERR, (__location__ " could not allocate state->options\n"));
- talloc_free(monitoring_status);
+ talloc_free(state);
return -1;
}
@@ -822,7 +829,7 @@ static int ctdb_event_script_callback_v(struct ctdb_context *ctdb,
ret = pipe(state->fd);
if (ret != 0) {
- talloc_free(monitoring_status);
+ talloc_free(state);
return -1;
}
@@ -831,7 +838,7 @@ static int ctdb_event_script_callback_v(struct ctdb_context *ctdb,
if (state->child == (pid_t)-1) {
close(state->fd[0]);
close(state->fd[1]);
- talloc_free(monitoring_status);
+ talloc_free(state);
return -1;
}
@@ -850,7 +857,11 @@ static int ctdb_event_script_callback_v(struct ctdb_context *ctdb,
}
talloc_set_destructor(state, event_script_destructor);
- ctdb->script_monitor_ctx = monitoring_status;
+ if (!strcmp(fmt, "monitor")) {
+ ctdb->script_monitor_ctx = monitoring_status;
+ } else {
+ ctdb->event_script_ctx = monitoring_status;
+ }
close(state->fd[1]);
set_close_on_exec(state->fd[0]);