diff options
author | Ronnie Sahlberg <ronniesahlberg@gmail.com> | 2009-10-28 17:35:15 +1100 |
---|---|---|
committer | Ronnie Sahlberg <ronniesahlberg@gmail.com> | 2009-10-28 17:35:15 +1100 |
commit | d379b30182eaa4d165d274866076de092719e18e (patch) | |
tree | d2492c51a85e87f0ed4c1f44359c78c31769ac37 /ctdb/server/eventscript.c | |
parent | f8a8c0d6e477f3dd6fe961764e86435033e2a3b3 (diff) | |
download | samba-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.c | 31 |
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]); |