uint32_t tet_glnd_testcase_3(SaNameT rscName) { GLSV_GLD_EVT gld_evt; uint32_t ret; GLND_CB *glnd_cb=0; glnd_cb = (GLND_CB *)ncshm_take_hdl(NCS_SERVICE_ID_GLND,gl_glnd_hdl); if (!glnd_cb) { printf(" Unable to retrieve GLND_CB ..\n"); return NCSCC_RC_FAILURE; } memset(&gld_evt,0,sizeof(GLSV_GLD_EVT)); gld_evt.evt_type = GLSV_GLD_EVT_RSC_OPEN; memcpy(&gld_evt.info.rsc_open_info.rsc_name, \ &rscName,sizeof(SaNameT)); ret=glnd_mds_msg_send_gld(glnd_cb,&gld_evt,glnd_cb->gld_mdest_id); if ( ret != NCSCC_RC_SUCCESS) { printf(" Unable to send GLSV_GLD_EVT_RSC_OPEN message \n"); } }
/***************************************************************************** PROCEDURE NAME : glnd_client_node_del DESCRIPTION : Deletes the client node from the tree. ARGUMENTS :glnd_cb - ptr to the GLND control block agent_mds_dest - mds dest id for the agent. RETURNS :NCSCC_RC_SUCCESS/NCSCC_RC_FAILURE NOTES : None *****************************************************************************/ uns32 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; SaLckLockModeT mode; GLSV_GLD_EVT gld_evt; NCS_BOOL orphan = FALSE; /* delete from the tree */ if (ncs_patricia_tree_del(&glnd_cb->glnd_client_tree, &client_info->patnode) != NCSCC_RC_SUCCESS) { m_LOG_GLND_API(GLND_CLIENT_TREE_DEL_FAILED, NCSFL_SEV_ERROR, __FILE__, __LINE__); return NCSCC_RC_FAILURE; } /* free up all the resource requests */ for (res_list = client_info->res_list; res_list != NULL;) { res_info = res_list->rsc_info; tmp_res_list = res_list; res_list = res_list->next; if (res_info) { glnd_set_orphan_state(glnd_cb, res_info); glnd_client_node_resource_del(glnd_cb, client_info, res_info); if (!res_info->lck_master_info.grant_list) { /* do the re sync of the grant list */ glnd_resource_master_lock_resync_grant_list(glnd_cb, res_info); } if (res_info->lcl_ref_cnt > 0) { memset(&gld_evt, 0, sizeof(GLSV_GLD_EVT)); gld_evt.evt_type = GLSV_GLD_EVT_RSC_CLOSE; gld_evt.info.rsc_details.rsc_id = res_info->resource_id; gld_evt.info.rsc_details.lcl_ref_cnt = res_info->lcl_ref_cnt; glnd_mds_msg_send_gld(glnd_cb, &gld_evt, glnd_cb->gld_mdest_id); res_info->lcl_ref_cnt--; } glnd_restart_resource_info_ckpt_overwrite(glnd_cb, res_info); if (tmp_res_list->open_ref_cnt > 1) { memset(&gld_evt, 0, sizeof(GLSV_GLD_EVT)); gld_evt.evt_type = GLSV_GLD_EVT_RSC_CLOSE; gld_evt.info.rsc_details.rsc_id = res_info->resource_id; gld_evt.info.rsc_details.lcl_ref_cnt = tmp_res_list->open_ref_cnt; glnd_mds_msg_send_gld(glnd_cb, &gld_evt, glnd_cb->gld_mdest_id); } if (res_info->lcl_ref_cnt == 0 && glnd_resource_grant_list_orphan_locks(res_info, &mode) == FALSE) { glnd_resource_node_destroy(glnd_cb, res_info, orphan); } } } /* 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) glnd_resource_req_node_del(glnd_cb, glnd_cb->res_req_list->res_req_hdl_id); } /* free the memory */ m_MMGR_FREE_GLND_CLIENT_INFO(client_info); return NCSCC_RC_SUCCESS; }