From: Amitay Isaacs Date: Wed, 9 May 2018 06:42:40 +0000 (+1000) Subject: ctdb-common: Do not initialize run_proc inside run_event X-Git-Tag: tevent-0.9.37~420 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=a883f8b0920d68d2d3b923463de59384a4eb8e8f;p=thirdparty%2Fsamba.git ctdb-common: Do not initialize run_proc inside run_event Allowing run_event_init() to take run_proc_context as an argument allows to create multiple run_event instances with a single run_proc_context. Signed-off-by: Amitay Isaacs Reviewed-by: Martin Schwenke --- diff --git a/ctdb/common/run_event.c b/ctdb/common/run_event.c index b1b50ecf9be..c78d956f588 100644 --- a/ctdb/common/run_event.c +++ b/ctdb/common/run_event.c @@ -272,7 +272,7 @@ struct run_event_context { }; -int run_event_init(TALLOC_CTX *mem_ctx, struct tevent_context *ev, +int run_event_init(TALLOC_CTX *mem_ctx, struct run_proc_context *run_proc_ctx, const char *script_dir, const char *debug_prog, struct run_event_context **out) { @@ -285,11 +285,7 @@ int run_event_init(TALLOC_CTX *mem_ctx, struct tevent_context *ev, return ENOMEM; } - ret = run_proc_init(run_ctx, ev, &run_ctx->run_proc_ctx); - if (ret != 0) { - talloc_free(run_ctx); - return ret; - } + run_ctx->run_proc_ctx = run_proc_ctx; ret = stat(script_dir, &st); if (ret != 0) { diff --git a/ctdb/common/run_event.h b/ctdb/common/run_event.h index bd0f3e675a9..72878e150a5 100644 --- a/ctdb/common/run_event.h +++ b/ctdb/common/run_event.h @@ -75,7 +75,7 @@ struct run_event_script_list { * @param[out] result New run_event context * @return 0 on success, errno on error */ -int run_event_init(TALLOC_CTX *mem_ctx, struct tevent_context *ev, +int run_event_init(TALLOC_CTX *mem_ctx, struct run_proc_context *run_proc_ctx, const char *script_dir, const char *debug_prog, struct run_event_context **result); diff --git a/ctdb/server/ctdb_eventd.c b/ctdb/server/ctdb_eventd.c index feeac074890..f1c8a8c8fec 100644 --- a/ctdb/server/ctdb_eventd.c +++ b/ctdb/server/ctdb_eventd.c @@ -50,6 +50,7 @@ struct eventd_client { }; struct eventd_context { + struct run_proc_context *run_proc_ctx; struct run_event_context *run_ctx; /* result of last execution */ @@ -78,7 +79,16 @@ static int eventd_context_init(TALLOC_CTX *mem_ctx, return ENOMEM; } - ret = run_event_init(ectx, ev, script_dir, debug_script, + ret = run_proc_init(ectx, ev, &ectx->run_proc_ctx); + if (ret != 0) { + talloc_free(ectx); + return ret; + } + + ret = run_event_init(ectx, + ectx->run_proc_ctx, + script_dir, + debug_script, &ectx->run_ctx); if (ret != 0) { talloc_free(ectx); diff --git a/ctdb/tests/src/run_event_test.c b/ctdb/tests/src/run_event_test.c index 5539ceb57c7..ddee92ed824 100644 --- a/ctdb/tests/src/run_event_test.c +++ b/ctdb/tests/src/run_event_test.c @@ -160,6 +160,7 @@ int main(int argc, const char **argv) { TALLOC_CTX *mem_ctx; struct tevent_context *ev; + struct run_proc_context *run_proc_ctx; struct run_event_context *run_ctx; int ret; @@ -180,7 +181,13 @@ int main(int argc, const char **argv) exit(1); } - ret = run_event_init(mem_ctx, ev, argv[1], NULL, &run_ctx); + ret = run_proc_init(mem_ctx, ev, &run_proc_ctx); + if (ret != 0) { + fprintf(stderr, "run_proc_init() failed, ret=%d\n", ret); + exit(1); + } + + ret = run_event_init(mem_ctx, run_proc_ctx, argv[1], NULL, &run_ctx); if (ret != 0) { fprintf(stderr, "run_event_init() failed, ret=%d\n", ret); exit(1);