osaf/services/saf/immsv/immnd/immnd_evt.c | 22 ++++++++++++---------- 1 files changed, 12 insertions(+), 10 deletions(-)
For non fevs requests, if the local IMMND can not find the client node corresponding to the imm-handle sent by the client, then the local IMMND replies directly with SA_AIS_ERR_BAD_HANDLE, instead of just dropping the request and causing client to timeout. This short circuited behavior is not possible for fevs requests, because such requests are forwarded to the IMMD and broadcast back to all IMMNDs including the originating node. The originating node's IMMND then no longer has the reply information on the stack. It expects to find it in the client node on the heap. If the client node does not exist, then no reply, not even ERR_BAD_HANDLE, can be sent to the client of that fevs request. diff --git a/osaf/services/saf/immsv/immnd/immnd_evt.c b/osaf/services/saf/immsv/immnd/immnd_evt.c --- a/osaf/services/saf/immsv/immnd/immnd_evt.c +++ b/osaf/services/saf/immsv/immnd/immnd_evt.c @@ -1913,8 +1913,9 @@ static uint32_t immnd_evt_proc_admowner_ client_hdl = evt->info.adminitReq.client_hdl; immnd_client_node_get(cb, client_hdl, &cl_node); if (cl_node == NULL || cl_node->mIsStale) { - LOG_WA("IMMND - Client %llu went down so no response", client_hdl); - return rc; + LOG_WA("ERR_BAD_HANDLE: Client not found in server"); + send_evt.info.imma.info.admInitRsp.error = SA_AIS_ERR_BAD_HANDLE; + goto agent_rsp; } if (!immnd_is_immd_up(cb)) { @@ -2018,8 +2019,9 @@ static uint32_t immnd_evt_proc_impl_set( client_hdl = evt->info.implSet.client_hdl; immnd_client_node_get(cb, client_hdl, &cl_node); if (cl_node == NULL || cl_node->mIsStale) { - LOG_WA("IMMND - Client went down so no response"); - return rc; + LOG_WA("ERR_BAD_HANDLE: Client not found in server"); + send_evt.info.imma.info.implSetRsp.error = SA_AIS_ERR_BAD_HANDLE; + goto agent_rsp; } if (!immnd_is_immd_up(cb)) { @@ -2141,9 +2143,9 @@ static uint32_t immnd_evt_proc_ccb_init( client_hdl = evt->info.ccbinitReq.client_hdl; immnd_client_node_get(cb, client_hdl, &cl_node); if (cl_node == NULL || cl_node->mIsStale) { - LOG_WA("IMMND - Client went down so no response"); - TRACE_LEAVE(); - return rc; + LOG_WA("ERR_BAD_HANDLE: Client not found in server"); + send_evt.info.imma.info.ccbInitRsp.error = SA_AIS_ERR_BAD_HANDLE; + goto agent_rsp; } if (!immnd_is_immd_up(cb)) { @@ -2256,9 +2258,9 @@ static uint32_t immnd_evt_proc_rt_update client_hdl = evt->info.objModify.immHandle; immnd_client_node_get(cb, client_hdl, &cl_node); if (cl_node == NULL || cl_node->mIsStale) { - LOG_WA("IMMND - Client went down so no response"); - TRACE_LEAVE(); - return rc; + LOG_WA("ERR_BAD_HANDLE: Client not found in server"); + err = SA_AIS_ERR_BAD_HANDLE; + goto agent_rsp; } /* Do broadcast checks BEFORE updating model because we dont want ------------------------------------------------------------------------------ Rapidly troubleshoot problems before they affect your business. Most IT organizations don't have a clear picture of how application performance affects their revenue. With AppDynamics, you get 100% visibility into your Java,.NET, & PHP application. Start your 15-day FREE TRIAL of AppDynamics Pro! http://pubads.g.doubleclick.net/gampad/clk?id=84349351&iu=/4140/ostg.clktrk _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel