Ack, Mathi. On Tue, Jan 28, 2020 at 5:56 PM Jones, Alex <ajo...@rbbn.com> wrote:
> lcknd fails health check and restarts > > When lcknd sends resource open requests to lckd it keeps them on a > list. If the open times out in lcknd because it cannot talk to lckd, > and the client finalizes or exits, lcknd attempts to clean up these > outstanding requests. But, it gets into an infinite loop traversing > the outstanding request list. > > Fully traverse the list. > --- > src/lck/lckd/gld_rsc.c | 12 ++++++------ > src/lck/lcknd/glnd_api.c | 2 +- > src/lck/lcknd/glnd_client.c | 10 ++++++---- > src/lck/lcknd/glnd_res_req.c | 2 ++ > 4 files changed, 15 insertions(+), 11 deletions(-) > > diff --git a/src/lck/lckd/gld_rsc.c b/src/lck/lckd/gld_rsc.c > index 7a45cd716..93a450738 100644 > --- a/src/lck/lckd/gld_rsc.c > +++ b/src/lck/lckd/gld_rsc.c > @@ -296,6 +296,7 @@ void gld_free_rsc_info(GLSV_GLD_CB *gld_cb, > GLSV_GLD_RSC_INFO *rsc_info) > GLSV_GLD_RSC_MAP_INFO *rsc_map_info = NULL; > SaNameT lck_name; > SaNameT immObj_name; > +SaAisErrorT rc = SA_AIS_OK; > > TRACE_ENTER(); > > @@ -322,12 +323,11 @@ void gld_free_rsc_info(GLSV_GLD_CB *gld_cb, > GLSV_GLD_RSC_INFO *rsc_info) > memcpy(&immObj_name, &rsc_info->lck_name, sizeof(SaNameT)); > /* delete imm runtime object */ > if (gld_cb->ha_state == SA_AMF_HA_ACTIVE) { > -if (immutil_saImmOiRtObjectDelete(gld_cb->immOiHandle, > - &immObj_name) != SA_AIS_OK) { > -LOG_ER("Deleting run time object %s FAILED", > - lck_name.value); > -TRACE_LEAVE(); > -return; > +rc = immutil_saImmOiRtObjectDelete(gld_cb->immOiHandle, > + &immObj_name); > +if (rc != SA_AIS_OK) { > +LOG_ER("Deleting run time object %s FAILED: %i", > + lck_name.value, rc); > } > } > rsc_map_info = (GLSV_GLD_RSC_MAP_INFO *)ncs_patricia_tree_get( > diff --git a/src/lck/lcknd/glnd_api.c b/src/lck/lcknd/glnd_api.c > index 1801e5e45..55328f9fb 100644 > --- a/src/lck/lcknd/glnd_api.c > +++ b/src/lck/lcknd/glnd_api.c > @@ -158,7 +158,7 @@ void glnd_process_mbx(GLND_CB *cb, SYSF_MBX *mbx) > GLSV_GLND_EVT *evt = NULL; > TRACE_ENTER(); > > -while ((evt = (GLSV_GLND_EVT *)m_NCS_IPC_NON_BLK_RECEIVE(mbx, evt))) { > +if ((evt = (GLSV_GLND_EVT *)m_NCS_IPC_NON_BLK_RECEIVE(mbx, evt))) { > if ((evt->type >= GLSV_GLND_EVT_BASE) && > (evt->type < GLSV_GLND_EVT_MAX)) { > /* process mail box */ > diff --git a/src/lck/lcknd/glnd_client.c b/src/lck/lcknd/glnd_client.c > index eead1af2a..906de1408 100644 > --- a/src/lck/lcknd/glnd_client.c > +++ b/src/lck/lcknd/glnd_client.c > @@ -283,6 +283,7 @@ uint32_t glnd_client_node_del(GLND_CB *glnd_cb, > GLND_CLIENT_INFO *client_info) > { > GLND_CLIENT_LIST_RESOURCE *res_list, *tmp_res_list; > GLND_RESOURCE_INFO *res_info; > +GLND_RESOURCE_REQ_LIST *req_list; > SaLckLockModeT mode; > bool orphan = false; > uint32_t rc = NCSCC_RC_SUCCESS; > @@ -335,11 +336,12 @@ uint32_t glnd_client_node_del(GLND_CB *glnd_cb, > GLND_CLIENT_INFO *client_info) > } > > /* free up any stale res_requests from this finalized client ... */ > -while (glnd_cb->res_req_list != NULL) { > -if (client_info->app_handle_id == > - glnd_cb->res_req_list->client_handle_id) > +for (req_list = glnd_cb->res_req_list; req_list; /*empty*/) { > +GLND_RESOURCE_REQ_LIST *tmp_req_list = req_list->next; > +if (client_info->app_handle_id == req_list->client_handle_id) > glnd_resource_req_node_del( > - glnd_cb, glnd_cb->res_req_list->res_req_hdl_id); > + glnd_cb, req_list->res_req_hdl_id); > +req_list = tmp_req_list; > } > > /* free the memory */ > diff --git a/src/lck/lcknd/glnd_res_req.c b/src/lck/lcknd/glnd_res_req.c > index b5dede887..95c84e641 100644 > --- a/src/lck/lcknd/glnd_res_req.c > +++ b/src/lck/lcknd/glnd_res_req.c > @@ -149,6 +149,7 @@ void glnd_resource_req_node_del(GLND_CB *glnd_cb, > uint32_t res_req_hdl) > GLND_RESOURCE_REQ_LIST *res_req_info; > res_req_info = (GLND_RESOURCE_REQ_LIST *)ncshm_take_hdl( > NCS_SERVICE_ID_GLND, res_req_hdl); > +TRACE_ENTER(); > > if (res_req_info != NULL) { > /* delete it from the list and return the pointer */ > @@ -169,6 +170,7 @@ void glnd_resource_req_node_del(GLND_CB *glnd_cb, > uint32_t res_req_hdl) > /* free the memory */ > m_MMGR_FREE_GLND_RESOURCE_REQ_LIST(res_req_info); > } > +TRACE_LEAVE(); > return; > } > > -- > 2.21.1 > > > ------------------------------ > Notice: This e-mail together with any attachments may contain information > of Ribbon Communications Inc. that is confidential and/or proprietary for > the sole use of the intended recipient. Any review, disclosure, reliance or > distribution by others or forwarding without express permission is strictly > prohibited. If you are not the intended recipient, please notify the sender > immediately and then delete all copies, including any attachments. > ------------------------------ > _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel