示例#1
0
/*****************************************************************************
  PROCEDURE NAME : eds_stop_tmr

  DESCRIPTION    : Stops the EDS timer.

  ARGUMENTS      : tmr    - ptr to the EDS timer block
               
  RETURNS        : void

  NOTES          : None
*****************************************************************************/
void eds_stop_tmr(EDS_TMR *tmr)
{
	/* If timer type is invalid just return */
	if (tmr == NULL) {
		m_LOG_EDSV_S(EDS_TIMER_STOP_FAIL, NCSFL_LC_EDSV_INIT, NCSFL_SEV_ERROR, 0, __FILE__, __LINE__, 0);
		return;
	} else if (EDS_TMR_MAX <= tmr->type) {
		m_LOG_EDSV_S(EDS_TIMER_STOP_FAIL, NCSFL_LC_EDSV_INIT, NCSFL_SEV_ERROR, tmr->type, __FILE__, __LINE__,
			     0);
		return;
	}

	/* Stop the timer if it is active... */
	if (tmr->is_active == TRUE) {
		m_NCS_TMR_STOP(tmr->tmr_id);
		tmr->is_active = FALSE;
	}

	/* Destroy the timer if it exists.. */
	if (tmr->tmr_id != TMR_T_NULL) {
		m_NCS_TMR_DESTROY(tmr->tmr_id);
		tmr->tmr_id = TMR_T_NULL;
	}

	return;
}
示例#2
0
/*****************************************************************************
  PROCEDURE NAME : eds_stop_tmr

  DESCRIPTION    : Stops the EDS timer.

  ARGUMENTS      : tmr    - ptr to the EDS timer block
               
  RETURNS        : void

  NOTES          : None
*****************************************************************************/
void eds_stop_tmr(EDS_TMR *tmr)
{
	/* If timer type is invalid just return */
	if (tmr == NULL) {
		TRACE_4("timer is NULL");
		TRACE_LEAVE();
		return;
	} else if (EDS_TMR_MAX <= tmr->type) {
		TRACE_4("unsupported timer type");
		TRACE_LEAVE();
		return;
	}

	/* Stop the timer if it is active... */
	if (tmr->is_active == true) {
		m_NCS_TMR_STOP(tmr->tmr_id);
		tmr->is_active = false;
	}

	/* Destroy the timer if it exists.. */
	if (tmr->tmr_id != TMR_T_NULL) {
		m_NCS_TMR_DESTROY(tmr->tmr_id);
		tmr->tmr_id = TMR_T_NULL;
	}

	return;
}
示例#3
0
/*****************************************************************************
  PROCEDURE NAME : gld_stop_tmr

  DESCRIPTION    : Stops the GLD timer.

  ARGUMENTS      : tmr    - ptr to the GLD timer block
               
  RETURNS        : void

  NOTES         : None
*****************************************************************************/
void gld_stop_tmr(GLD_TMR *tmr)
{
	/* If timer type is invalid just return */
	if (tmr == NULL) {
		m_LOG_GLD_TIMER(GLD_TIMER_STOP_FAIL, 0, __FILE__, __LINE__);
		return;
	}
	if (tmr != NULL && GLD_TMR_MAX <= tmr->type) {
		m_LOG_GLD_TIMER(GLD_TIMER_STOP_FAIL, tmr->type, __FILE__, __LINE__);
		return;
	}

	/* Stop the timer if it is active... */
	if (tmr->is_active == TRUE) {
		TRACE("Stopped GLD Timer for %d", tmr->type);
		m_NCS_TMR_STOP(tmr->tmr_id);
		tmr->is_active = FALSE;
	}

	/* Destroy the timer if it exists.. */
	if (tmr->tmr_id != TMR_T_NULL) {
		m_NCS_TMR_DESTROY(tmr->tmr_id);
		tmr->tmr_id = TMR_T_NULL;
	}
	return;
}
/***************************************************************************** 
                                                                              
  PROCEDURE          :    ncs_exc_mdl_stop_timer                                          
                                                                               
  DESCRIPTION:       This function is used to stop a timer 
                                                                               
  ARGUMENTS:                                                                   
                                                                               
  RETURNS:           Nothing.                                                 
                                                                               
  NOTES:                                                                
                                                                               
*****************************************************************************/
void ncs_exc_mdl_stop_timer(SYSF_PID_LIST *exec_pid)
{
	m_NCS_TMR_STOP(exec_pid->tmr_id);

	m_NCS_TMR_DESTROY(exec_pid->tmr_id);
	exec_pid->tmr_id = NULL;

}
示例#5
0
/****************************************************************************\
 PROCEDURE NAME : mqd_timer_expiry_evt_process

 DESCRIPTION    : This routine process the comp specific message.

 ARGUMENTS      : pMqd - MQD Control block pointer
                  nodeid - NODE ID

 RETURNS        : NCSCC_RC_SUCCESS/NCSCC_RC_FAILURE
\*****************************************************************************/
uns32 mqd_timer_expiry_evt_process(MQD_CB *pMqd, NODE_ID *nodeid)
{
	MQD_ND_DB_NODE *pNdNode = 0;
	MQD_OBJ_NODE *pNode = 0;
	MQD_A2S_MSG msg;
	uns32 rc = NCSCC_RC_SUCCESS;

	m_LOG_MQSV_D(MQD_TMR_EXPIRED, NCSFL_LC_TIMER, NCSFL_SEV_NOTICE, NCS_PTR_TO_UNS32_CAST(nodeid), __FILE__,
		     __LINE__);
	pNdNode = (MQD_ND_DB_NODE *)ncs_patricia_tree_get(&pMqd->node_db, (uns8 *)nodeid);

	/* We need to scan the entire database and remove the track inforamtion
	 * pertaining to the user
	 */

	if (pNdNode == NULL) {
		rc = NCSCC_RC_FAILURE;
		return rc;
	}
	if (pMqd->ha_state == SA_AMF_HA_ACTIVE) {
		if (pNdNode->info.timer.tmr_id != TMR_T_NULL) {
			m_NCS_TMR_DESTROY(pNdNode->info.timer.tmr_id);
			pNdNode->info.timer.tmr_id = TMR_T_NULL;
		}

		pNode = (MQD_OBJ_NODE *)ncs_patricia_tree_getnext(&pMqd->qdb, (uns8 *)0);
		while (pNode) {
			ASAPi_DEREG_INFO dereg;
			SaNameT name;

			memset(&dereg, 0, sizeof(ASAPi_DEREG_INFO));

			name = pNode->oinfo.name;

			if (m_NCS_NODE_ID_FROM_MDS_DEST(pNode->oinfo.info.q.dest) == pNdNode->info.nodeid) {
				dereg.objtype = ASAPi_OBJ_QUEUE;
				dereg.queue = pNode->oinfo.name;
				rc = mqd_asapi_dereg_hdlr(pMqd, &dereg, NULL);
			}

			pNode = (MQD_OBJ_NODE *)ncs_patricia_tree_getnext(&pMqd->qdb, (uns8 *)&name);
		}
		/* Send an async Update to the standby */
		memset(&msg, 0, sizeof(MQD_A2S_MSG));
		msg.type = MQD_A2S_MSG_TYPE_MQND_TIMER_EXPEVT;
		msg.info.nd_tmr_exp_evt.nodeid = pNdNode->info.nodeid;
		/* Send async update to the standby for MQD redundancy */
		mqd_a2s_async_update(pMqd, MQD_A2S_MSG_TYPE_MQND_TIMER_EXPEVT, (void *)(&msg.info.nd_tmr_exp_evt));

		if (pNdNode)
			mqd_red_db_node_del(pMqd, pNdNode);
		TRACE("MQND TMR EXPIRY PROCESSED ON ACTIVE");
	} else if (pMqd->ha_state == SA_AMF_HA_STANDBY) {
		pNdNode->info.timer.is_expired = TRUE;
		TRACE("MQND TMR EXPIRY PROCESSED ON STANDBY");
	}
	return rc;
}	/* End of mqd_timer_expiry_evt_process() */
示例#6
0
/****************************************************************************
 * Name          : mqd_tmr_stop
 *
 * Description   : This function which is used to stop the MQD Timer
 *
 * Arguments     : tmr      - Timer needs to be stoped.
 *
 * Return Values : None.
 *
 * Notes         : None.
 *****************************************************************************/
void mqd_tmr_stop(MQD_TMR *tmr)
{
	m_LOG_MQSV_D(MQD_TMR_STOPPED, NCSFL_LC_TIMER, NCSFL_SEV_NOTICE, 1, __FILE__, __LINE__);
	if (tmr->is_active == TRUE) {
		m_NCS_TMR_STOP(tmr->tmr_id);
		tmr->is_active = FALSE;
	}
	if (tmr->tmr_id != TMR_T_NULL) {
		m_NCS_TMR_DESTROY(tmr->tmr_id);
		tmr->tmr_id = TMR_T_NULL;
	}
	return;
}
示例#7
0
/****************************************************************************
 * Name          : mqd_tmr_stop
 *
 * Description   : This function which is used to stop the MQD Timer
 *
 * Arguments     : tmr      - Timer needs to be stoped.
 *
 * Return Values : None.
 *
 * Notes         : None.
 *****************************************************************************/
void mqd_tmr_stop(MQD_TMR *tmr)
{
	TRACE_1("The timer stopped");
	if (tmr->is_active == true) {
		m_NCS_TMR_STOP(tmr->tmr_id);
		tmr->is_active = false;
	}
	if (tmr->tmr_id != TMR_T_NULL) {
		m_NCS_TMR_DESTROY(tmr->tmr_id);
		tmr->tmr_id = TMR_T_NULL;
	}
	return;
}
示例#8
0
/****************************************************************************
 * Name          : cpd_tmr_stop
 *
 * Description   : This function which is used to stop the CPD Timer
 *
 * Arguments     : tmr      - Timer needs to be stoped.
 *
 * Return Values : None.
 *
 * Notes         : None.
 *****************************************************************************/
void cpd_tmr_stop(CPD_TMR *tmr)
{
	if (tmr->is_active == true) {
		tmr->is_active = false;
		m_NCS_TMR_STOP(tmr->tmr_id);

	}
	if (tmr->tmr_id != TMR_T_NULL) {
		m_NCS_TMR_DESTROY(tmr->tmr_id);
		tmr->tmr_id = TMR_T_NULL;
	}
	return;
}
示例#9
0
/***************************************************************************** 
                                                                              
  PROCEDURE          :    ncs_mbcsv_stop_timer                                          
                                                                               
  DESCRIPTION:       This function is used to stop a NCS_MBCSV timer 
                                                                               
  ARGUMENTS:                                                                   
                                                                               
  RETURNS:           Nothing.                                                 
                                                                               
  NOTES:                                                                
                                                                               
*****************************************************************************/
void ncs_mbcsv_stop_timer(PEER_INST *peer, uint32_t timer_type)
{
	NCS_MBCSV_TMR *tmr;

	if (timer_type >= NCS_MBCSV_MAX_TMRS) {
		TRACE_LEAVE2("Timer type out of range: %u", timer_type);
		return;
	}
	tmr = &peer->tmr[timer_type];

	/* Stop and destroy the timer if it is active... */

	tmr->has_expired = false;	/* if in transit, not valid now */

	if (tmr->is_active == true) {
	TRACE("stop and destroying timer. my role:%u, svc_id:%u, pwe_hdl:%u, peer_anchor: %" PRIu64 ", tmr type:%s",
				peer->my_ckpt_inst->my_role,
				peer->my_ckpt_inst->my_mbcsv_inst->svc_id,
				peer->my_ckpt_inst->pwe_hdl, peer->peer_anchor,
				tmr_type_str[timer_type]);

		m_NCS_TMR_STOP(tmr->tmr_id);
		tmr->is_active = false;
		m_NCS_TMR_DESTROY(tmr->tmr_id);
		tmr->tmr_id = TMR_T_NULL;
	} else if (tmr->tmr_id != TMR_T_NULL) {
		/* Destroy the timer if it exists... */
		TRACE("Destroying timer. my role:%u, svc_id:%u, pwe_hdl:%u, peer_anchor:%" PRIu64 ", tmr type:%s",
				peer->my_ckpt_inst->my_role,
				peer->my_ckpt_inst->my_mbcsv_inst->svc_id,
				peer->my_ckpt_inst->pwe_hdl, peer->peer_anchor,
				tmr_type_str[timer_type]);

		m_NCS_TMR_DESTROY(tmr->tmr_id);
		tmr->tmr_id = TMR_T_NULL;
	}
}
示例#10
0
/*****************************************************************************
  PROCEDURE NAME : eds_tmr_exp

  DESCRIPTION    : EDS timer expiry callback routine.It sends corresponding
                   timer events to EDS.

  ARGUMENTS      : uarg - ptr to the EDS timer block

  RETURNS        : void

  NOTES         : None
*****************************************************************************/
void eds_tmr_exp(void *uarg)
{
	EDS_CB *eds_cb = 0;
	EDS_TMR *tmr = (EDS_TMR *)uarg;
	EDSV_EDS_EVT *evt = 0;
	uns32 temp_tmr_hdl;

	temp_tmr_hdl = tmr->cb_hdl;

	/* retrieve EDS CB */
	if (NULL == (eds_cb = (EDS_CB *)ncshm_take_hdl(NCS_SERVICE_ID_EDS, tmr->cb_hdl))) {
		m_LOG_EDSV_S(EDS_CB_TAKE_HANDLE_FAILED, NCSFL_LC_EDSV_INIT, NCSFL_SEV_ERROR, 0, __FILE__, __LINE__, 0);
		return;
	}

	if (tmr->is_active) {
		tmr->is_active = FALSE;
		/* Destroy the timer if it exists.. */
		if (tmr->tmr_id != TMR_T_NULL) {
			m_NCS_TMR_DESTROY(tmr->tmr_id);
			tmr->tmr_id = TMR_T_NULL;
		}

		/* create & send the timer event */
		evt = m_MMGR_ALLOC_EDSV_EDS_EVT;
		if (evt) {
			memset(evt, '\0', sizeof(EDSV_EDS_EVT));

			/* assign the timer evt */
			evt->evt_type = eds_tmr_evt_map(tmr->type);
			evt->info.tmr_info.opq_hdl = tmr->opq_hdl;

			evt->cb_hdl = tmr->cb_hdl;

			if (NCSCC_RC_FAILURE == m_NCS_IPC_SEND(&eds_cb->mbx, evt, NCS_IPC_PRIORITY_HIGH)) {
				m_LOG_EDSV_S(EDS_TIMER_STOP_FAIL, NCSFL_LC_EDSV_INIT, NCSFL_SEV_ERROR, evt->cb_hdl,
					     __FILE__, __LINE__, evt->evt_type);
				eds_evt_destroy(evt);
			}

		}

	}

	/* return EDS CB */
	ncshm_give_hdl(temp_tmr_hdl);

	return;
}
示例#11
0
/*****************************************************************************
  PROCEDURE NAME : eds_tmr_exp

  DESCRIPTION    : EDS timer expiry callback routine.It sends corresponding
                   timer events to EDS.

  ARGUMENTS      : uarg - ptr to the EDS timer block

  RETURNS        : void

  NOTES         : None
*****************************************************************************/
void eds_tmr_exp(void *uarg)
{
	EDS_CB *eds_cb = 0;
	EDS_TMR *tmr = (EDS_TMR *)uarg;
	EDSV_EDS_EVT *evt = 0;
	uint32_t temp_tmr_hdl;

	temp_tmr_hdl = tmr->cb_hdl;

	/* retrieve EDS CB */
	if (NULL == (eds_cb = (EDS_CB *)ncshm_take_hdl(NCS_SERVICE_ID_EDS, tmr->cb_hdl))) {
		LOG_ER("Global take handle failed");
		return;
	}

	if (tmr->is_active) {
		tmr->is_active = false;
		/* Destroy the timer if it exists.. */
		if (tmr->tmr_id != TMR_T_NULL) {
			m_NCS_TMR_DESTROY(tmr->tmr_id);
			tmr->tmr_id = TMR_T_NULL;
		}

		/* create & send the timer event */
		evt = m_MMGR_ALLOC_EDSV_EDS_EVT;
		if (evt) {
			memset(evt, '\0', sizeof(EDSV_EDS_EVT));

			/* assign the timer evt */
			evt->evt_type = eds_tmr_evt_map(tmr->type);
			evt->info.tmr_info.opq_hdl = tmr->opq_hdl;

			evt->cb_hdl = tmr->cb_hdl;

			if (NCSCC_RC_FAILURE == m_NCS_IPC_SEND(&eds_cb->mbx, evt, NCS_IPC_PRIORITY_HIGH)) {
				LOG_ER("IPC send failed for timer event");
				eds_evt_destroy(evt);
			}

		}

	}

	/* return EDS CB */
	ncshm_give_hdl(temp_tmr_hdl);

	return;
}
示例#12
0
/****************************************************************************
 * Name          : mqd_timer_expiry
 *
 * Description   : This function which is registered with the OS tmr function,
 *                 which will post a message to the corresponding mailbox 
 *                 depending on the component type.
 *
 *****************************************************************************/
void mqd_timer_expiry(NCSCONTEXT uarg)
{
	MQD_TMR *tmr = (MQD_TMR *)uarg;
	NCS_IPC_PRIORITY priority = NCS_IPC_PRIORITY_HIGH;
	MQD_CB *cb;
	MQSV_EVT *evt = 0;
	uns32 mqd_hdl;

	if (tmr != NULL) {
		mqd_hdl = tmr->uarg;

		if (tmr->is_active)
			tmr->is_active = FALSE;
		/* Destroy the timer if it exists.. */
		if (tmr->tmr_id != TMR_T_NULL) {
			m_NCS_TMR_DESTROY(tmr->tmr_id);
			tmr->tmr_id = TMR_T_NULL;
		}

		/* post a message to the corresponding component */
		if ((cb = (MQD_CB *)ncshm_take_hdl(NCS_SERVICE_ID_MQD, mqd_hdl))
		    != NULL) {
			evt = m_MMGR_ALLOC_MQSV_EVT(NCS_SERVICE_ID_MQD);
			if (evt == NULL) {
				m_LOG_MQSV_D(MQD_MEMORY_ALLOC_FAIL, NCSFL_LC_TIMER, NCSFL_SEV_ERROR, 0, __FILE__,
					     __LINE__);
				return;
			}
			memset(evt, 0, sizeof(MQSV_EVT));

			evt->type = MQSV_EVT_MQD_CTRL;
			evt->msg.mqd_ctrl.type = MQD_MSG_TMR_EXPIRY;
			evt->msg.mqd_ctrl.info.tmr_info.nodeid = tmr->nodeid;
			evt->msg.mqd_ctrl.info.tmr_info.type = tmr->type;

			/* Post the event to MQD Thread */
			m_NCS_IPC_SEND(&cb->mbx, evt, priority);

			ncshm_give_hdl(mqd_hdl);
		}
	}
	return;
}
示例#13
0
/**************************************************************************\
 * exec_mod_cb_destroy
 *
 * Description       : Destroys module control block.
 *              
 * Call Arguments    : None  
 *
 * Returns:

 * SUCCESS/FAILURE   : NCSCC_RC_SUCCESS / NCSCC_RC_FAILURE 
 *
 * Notes:
 *
\**************************************************************************/
uns32 exec_mod_cb_destroy(void)
{
	SYSF_PID_LIST *exec_pid = NULL;
	uns8 pid = 0;

	if (module_cb.init == TRUE) {
		module_cb.init = FALSE;
		m_NCS_SIGNAL(SIGCHLD, SIG_DFL);

		close(module_cb.write_fd);
		close(module_cb.read_fd);

		m_NCS_TASK_RELEASE(module_cb.em_task_handle);

		m_NCS_LOCK(&module_cb.tree_lock, NCS_LOCK_WRITE);

		while (NULL != (exec_pid = (SYSF_PID_LIST *)ncs_patricia_tree_getnext(&module_cb.pid_list,
										      (const uns8 *)&pid))) {

			ncs_patricia_tree_del(&module_cb.pid_list, (NCS_PATRICIA_NODE *)exec_pid);

			if (exec_pid->tmr_id != NULL)
				m_NCS_TMR_DESTROY(exec_pid->tmr_id);

			m_MMGR_FREE_PRO_EXC(exec_pid);
		}

		if (ncs_patricia_tree_destroy(&module_cb.pid_list) != NCSCC_RC_SUCCESS) {
			return m_LEAP_DBG_SINK(NCSCC_RC_FAILURE);
		}

		m_NCS_UNLOCK(&module_cb.tree_lock, NCS_LOCK_WRITE);
	}

	m_NCS_LOCK_DESTROY(&module_cb.tree_lock);

	return NCSCC_RC_SUCCESS;
}
示例#14
0
/****************************************************************************\
 PROCEDURE NAME : mqd_timer_expiry_evt_process

 DESCRIPTION    : This routine process the comp specific message.

 ARGUMENTS      : pMqd - MQD Control block pointer
                  nodeid - NODE ID

 RETURNS        : NCSCC_RC_SUCCESS/NCSCC_RC_FAILURE
\*****************************************************************************/
uint32_t mqd_timer_expiry_evt_process(MQD_CB *pMqd, NODE_ID *nodeid)
{
	MQD_ND_DB_NODE *pNdNode = 0;
	MQD_OBJ_NODE *pNode = 0;
	MQD_A2S_MSG msg;
	SaImmOiHandleT immOiHandle;
	SaImmOiImplementerNameT implementer_name;
	char i_name[256] = {0};
	SaVersionT imm_version = {'A',0x02,0x01};
	uint32_t rc = NCSCC_RC_SUCCESS;
	TRACE_ENTER2("The Timer expired with node id %u", *nodeid);

	pNdNode = (MQD_ND_DB_NODE *)ncs_patricia_tree_get(&pMqd->node_db, (uint8_t *)nodeid);

	/* We need to scan the entire database and remove the track inforamtion
	 * pertaining to the user
	 */

	if (pNdNode == NULL) {
		LOG_ER("MQD_ND_DB_NODE is NULL");
		rc = NCSCC_RC_FAILURE;
		return rc;
	}
	if (pMqd->ha_state == SA_AMF_HA_ACTIVE) {
		rc = immutil_saImmOiInitialize_2(&immOiHandle, NULL, &imm_version);
		if (rc != SA_AIS_OK)
			LOG_ER("saImmOiInitialize_2 failed with return value=%d",rc);

		snprintf(i_name, SA_MAX_NAME_LENGTH, "%s%u", "MsgQueueService", *nodeid);
		implementer_name = i_name;

		rc = immutil_saImmOiImplementerSet(immOiHandle, implementer_name);
		if (rc != SA_AIS_OK)
			LOG_ER("saImmOiImplementerSet failed with return value=%d",rc);

		if (pNdNode->info.timer.tmr_id != TMR_T_NULL) {
			m_NCS_TMR_DESTROY(pNdNode->info.timer.tmr_id);
			pNdNode->info.timer.tmr_id = TMR_T_NULL;
		}

		pNode = (MQD_OBJ_NODE *)ncs_patricia_tree_getnext(&pMqd->qdb, (uint8_t *)0);
		while (pNode) {
			ASAPi_DEREG_INFO dereg;
			SaNameT name;

			memset(&dereg, 0, sizeof(ASAPi_DEREG_INFO));

			name = pNode->oinfo.name;

			if (m_NCS_NODE_ID_FROM_MDS_DEST(pNode->oinfo.info.q.dest) == pNdNode->info.nodeid) {
				dereg.objtype = ASAPi_OBJ_QUEUE;
				dereg.queue = pNode->oinfo.name;
				rc = immutil_saImmOiRtObjectDelete(immOiHandle, &dereg.queue);
				if (rc != NCSCC_RC_SUCCESS)
					LOG_ER("Deleting MsgQGrp object %s FAILED with error %u", dereg.queue.value,rc);
				rc = mqd_asapi_dereg_hdlr(pMqd, &dereg, NULL);
			}

			pNode = (MQD_OBJ_NODE *)ncs_patricia_tree_getnext(&pMqd->qdb, (uint8_t *)&name);
		}
		rc = immutil_saImmOiFinalize(immOiHandle);
		if (rc != NCSCC_RC_SUCCESS)
			LOG_ER("saImmOiFinalize failed with return value=%d",rc);	
		/* Send an async Update to the standby */
		memset(&msg, 0, sizeof(MQD_A2S_MSG));
		msg.type = MQD_A2S_MSG_TYPE_MQND_TIMER_EXPEVT;
		msg.info.nd_tmr_exp_evt.nodeid = pNdNode->info.nodeid;
		/* Send async update to the standby for MQD redundancy */
		mqd_a2s_async_update(pMqd, MQD_A2S_MSG_TYPE_MQND_TIMER_EXPEVT, (void *)(&msg.info.nd_tmr_exp_evt));

		if (pNdNode)
			mqd_red_db_node_del(pMqd, pNdNode);
		TRACE_1("MQND TMR EXPIRY PROCESSED ON ACTIVE");
	} else if (pMqd->ha_state == SA_AMF_HA_STANDBY) {
		pNdNode->info.timer.is_expired = true;
		TRACE_1("MQND TMR EXPIRY PROCESSED ON STANDBY");
	}
	TRACE_LEAVE();
	return rc;
}	/* End of mqd_timer_expiry_evt_process() */