timer->source_id = -1;
timer->source_id = 0;
timer_callback(gpointer data){	te_timer_t *timer = NULL;		if(data == NULL) {		crm_err("Timer popped with no data");		return FALSE;	}		timer = (te_timer_t*)data;	if(timer->source_id > 0) {		Gmain_timeout_remove(timer->source_id);	}	timer->source_id = -1;	crm_warn("Timer popped in state=%d", te_fsa_state);	if(timer->reason == timeout_abort) {		crm_err("Transition abort timeout reached..."			 " marking transition complete.");					send_complete(XML_ATTR_TIMEOUT, NULL,			      te_abort_timeout, i_cmd_complete);				return TRUE;			} else if(te_fsa_state != s_in_transition) {		crm_debug("Ignoring timeout while not in transition");		return TRUE;			} else if(timer->reason == timeout_timeout) {				/* global timeout - abort the transition */		crm_warn("Transition timeout reached..."			 " marking transition complete.");				crm_warn("Some actions may not have been executed.");					send_complete(XML_ATTR_TIMEOUT, NULL, te_timeout, i_cancel);				return TRUE;			} else if(timer->action == NULL) {		crm_err("Action not present!");		return FALSE;			} else if(timer->reason == timeout_action_warn) {		print_action("Action missed its timeout",			     timer->action, LOG_WARNING);		return TRUE;			} else {		/* fail the action		 * - which may or may not abort the transition		 */		/* TODO: send a cancel notice to the LRM */		/* TODO: use the ack from above to update the CIB */		return cib_action_update(timer->action, LRM_OP_TIMEOUT);	}}