/**************************************************************************** * Name : gld_clear_mbx * * Description : This is the function which deletes all the messages from * the mail box. * * Arguments : arg - argument to be passed. * msg - Event start pointer. * * Return Values : TRUE/FALSE * * Notes : None. *****************************************************************************/ NCS_BOOL gld_clear_mbx(NCSCONTEXT arg, NCSCONTEXT msg) { GLSV_GLD_EVT *pEvt = (GLSV_GLD_EVT *)msg; GLSV_GLD_EVT *pnext; pnext = pEvt; while (pnext) { pnext = pEvt->next; gld_evt_destroy(pEvt); pEvt = pnext; } return TRUE; }
/***************************************************************************** PROCEDURE NAME : gld_tmr_exp DESCRIPTION : GLD timer expiry callback routine.It sends corresponding timer events to GLD. ARGUMENTS : uarg - ptr to the GLD timer block RETURNS : void NOTES : None *****************************************************************************/ void gld_tmr_exp(void *uarg) { GLSV_GLD_CB *cb = 0; GLD_TMR *tmr = (GLD_TMR *)uarg; GLSV_GLD_EVT *evt = 0; uns32 cb_hdl; cb_hdl = tmr->cb_hdl; /* retrieve GLD CB */ cb = (GLSV_GLD_CB *)ncshm_take_hdl(NCS_SERVICE_ID_GLD, tmr->cb_hdl); if (!cb) { m_LOG_GLD_HEADLINE(GLD_TAKE_HANDLE_FAILED, NCSFL_SEV_ERROR, __FILE__, __LINE__, 0); return; } tmr->is_active = FALSE; /* create & send the timer event */ evt = m_MMGR_ALLOC_GLSV_GLD_EVT; if (evt == GLSV_GLD_EVT_NULL) { m_LOG_GLD_MEMFAIL(GLD_EVT_ALLOC_FAILED, __FILE__, __LINE__); ncshm_give_hdl(cb_hdl); return; } memset(evt, 0, sizeof(GLSV_GLD_EVT)); if (evt) { /* assign the timer evt */ evt->evt_type = gld_tmr_evt_map(tmr->type); evt->info.tmr.opq_hdl = tmr->opq_hdl; evt->info.tmr.resource_id = tmr->resource_id; memcpy(&evt->info.tmr.mdest_id, &tmr->mdest_id, sizeof(MDS_DEST)); evt->gld_cb = cb; /* Push the event and we are done */ if (m_NCS_IPC_SEND(&cb->mbx, evt, NCS_IPC_PRIORITY_NORMAL) == NCSCC_RC_FAILURE) { m_LOG_GLD_HEADLINE(GLD_IPC_SEND_FAIL, NCSFL_SEV_ERROR, __FILE__, __LINE__, 0); gld_evt_destroy(evt); ncshm_give_hdl(cb_hdl); return; } } /* return GLD CB */ ncshm_give_hdl(cb_hdl); return; }
/**************************************************************************** * Name : gld_process_evt * * Description : This is the function which is called when gld receives any * event * * Arguments : evt - Event that was posted to the GLD Mail box * * Return Values : NCSCC_RC_SUCCESS/NCSCC_RC_FAILURE * * Notes : None. *****************************************************************************/ uns32 gld_process_evt(GLSV_GLD_EVT *evt) { GLSV_GLD_CB *gld_cb = evt->gld_cb; if (gld_cb->ha_state == SA_AMF_HA_ACTIVE) { if (gld_evt_dispatch_tbl[evt->evt_type] (evt) != NCSCC_RC_SUCCESS) { m_LOG_GLD_HEADLINE(GLD_EVT_PROC_FAILED, NCSFL_SEV_ERROR, __FILE__, __LINE__, 0); } } if (gld_cb->ha_state == SA_AMF_HA_STANDBY) { if (evt->evt_type == GLSV_GLD_EVT_GLND_DOWN || evt->evt_type == GLSV_GLD_EVT_RESTART_TIMEOUT) { if (gld_evt_dispatch_tbl[evt->evt_type] (evt) != NCSCC_RC_SUCCESS) { m_LOG_GLD_HEADLINE(GLD_EVT_PROC_FAILED, NCSFL_SEV_ERROR, __FILE__, __LINE__, 0); } } } gld_evt_destroy(evt); return NCSCC_RC_SUCCESS; }
/**************************************************************************** * Name : gld_process_evt * * Description : This is the function which is called when gld receives any * event * * Arguments : evt - Event that was posted to the GLD Mail box * * Return Values : NCSCC_RC_SUCCESS/NCSCC_RC_FAILURE * * Notes : None. *****************************************************************************/ uint32_t gld_process_evt(GLSV_GLD_EVT *evt) { GLSV_GLD_CB *gld_cb = evt->gld_cb; TRACE_ENTER2("Event type: %d", evt->evt_type); if (gld_cb->ha_state == SA_AMF_HA_ACTIVE) { if (gld_evt_dispatch_tbl[evt->evt_type] (evt) != NCSCC_RC_SUCCESS) { TRACE_2("Event processing failed"); } } if (gld_cb->ha_state == SA_AMF_HA_STANDBY) { if (evt->evt_type == GLSV_GLD_EVT_GLND_DOWN || evt->evt_type == GLSV_GLD_EVT_RESTART_TIMEOUT) { if (gld_evt_dispatch_tbl[evt->evt_type] (evt) != NCSCC_RC_SUCCESS) { LOG_ER("Event processing failed"); } } } gld_evt_destroy(evt); TRACE_LEAVE(); return NCSCC_RC_SUCCESS; }