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

Reply via email to