action->invoked = TRUE;
cib_action_updated(	const HA_Message *msg, int call_id, int rc, crm_data_t *output, void *user_data){	HA_Message *cmd = NULL;	crm_data_t *rsc_op  = NULL;	const char *task    = NULL;	const char *rsc_id  = NULL;	const char *on_node = NULL;	action_t *action = user_data;	char *counter = crm_itoa(transition_counter);	CRM_DEV_ASSERT(action != NULL);      if(crm_assert_failed) { return; }	CRM_DEV_ASSERT(action->xml != NULL); if(crm_assert_failed) { return; }	rsc_op  = action->xml;	task    = crm_element_value(rsc_op, XML_LRM_ATTR_TASK);	rsc_id  = crm_element_value(rsc_op, XML_LRM_ATTR_RSCID);	on_node = crm_element_value(rsc_op, XML_LRM_ATTR_TARGET);	counter = generate_transition_key(transition_counter, te_uuid);	crm_xml_add(rsc_op, XML_ATTR_TRANSITION_KEY, counter);	crm_free(counter);		if(rc < cib_ok) {		crm_err("Update for action %d: %s %s on %s FAILED",			action->id, task, rsc_id, on_node);		send_complete(cib_error2string(rc), output, te_failed, i_cancel);		return;	}	if(te_fsa_state != s_in_transition) {		int pending_updates = num_cib_op_callbacks();		if(pending_updates == 0) {			send_complete("CIB update queue empty", output,				      te_done, i_cib_complete);		} else {			crm_debug("Still waiting on %d callbacks",				pending_updates);		}		crm_debug("Not executing action: Not in a transition: %d",			  te_fsa_state);		return;	}		crm_info("Initiating action %d: %s %s on %s",		 action->id, task, rsc_id, on_node);		if(rsc_op != NULL) {		crm_log_xml_debug_2(rsc_op, "Performing");	}	cmd = create_request(		task, rsc_op, on_node, CRM_SYSTEM_LRMD,CRM_SYSTEM_TENGINE,NULL);	#ifndef TESTING	send_ipc_message(crm_ch, cmd);#else	crm_log_message(LOG_INFO, cmd);#endif		if(action->timeout > 0) {		crm_debug_3("Setting timer for action %d",action->id);		action->timer->reason = timeout_action_warn;		start_te_timer(action->timer);	}}