From 92c3ba0359d38829318d3d6d93d32c1baee06c03 Mon Sep 17 00:00:00 2001 From: Lon Hohberger <lhh@redhat.com> Date: Tue, 6 Oct 2009 16:00:47 -0400 Subject: [PATCH] rgmanager: Fix multiple event processing w/ EVENT_USER We were trying to send responses to each event, which could cause a crash. Resolves: bz527239 Signed-off-by: Lon Hohberger <lhh@redhat.com> --- rgmanager/src/daemons/slang_event.c | 15 ++++++++------- 1 files changed, 8 insertions(+), 7 deletions(-) diff --git a/rgmanager/src/daemons/slang_event.c b/rgmanager/src/daemons/slang_event.c index d410a40..8a5493c 100644 --- a/rgmanager/src/daemons/slang_event.c +++ b/rgmanager/src/daemons/slang_event.c @@ -1155,7 +1155,7 @@ S_service_event(const char *file, const char *script, char *name, int S_user_event(const char *file, const char *script, char *name, - int request, int arg1, int arg2, int target, msgctx_t *ctx) + int request, int arg1, int arg2, int target, msgctx_t **ctx) { int ret = RG_SUCCESS; @@ -1179,20 +1179,21 @@ S_user_event(const char *file, const char *script, char *name, /* XXX Send response code to caller - that 0 should be the new service owner, if there is one */ - if (ctx) { + if (*ctx) { if (_user_return > 0) { /* sl_start_service() squashes return code and node ID into one value. <0 = error, >0 = success, return-value == node id running service */ - send_ret(ctx, name, 0, request, _user_return); + send_ret(*ctx, name, 0, request, _user_return); } else { /* return value < 0 ... pass directly back; don't transpose */ - send_ret(ctx, name, _user_return, request, 0); + send_ret(*ctx, name, _user_return, request, 0); } - msg_close(ctx); - msg_free_ctx(ctx); + msg_close(*ctx); + msg_free_ctx(*ctx); + *ctx = NULL; } _user_return = 0; return ret; @@ -1232,7 +1233,7 @@ slang_do_script(event_t *pattern, event_t *ev) ev->ev.user.u_arg1, ev->ev.user.u_arg2, ev->ev.user.u_target, - ev->ev.user.u_ctx); + &ev->ev.user.u_ctx); break; default: break; -- 1.6.2.5