process_graph_event(xmlNodePtr event)
process_graph_event(crm_data_t *event)
process_graph_event(xmlNodePtr event){	int action_id          = -1;	int op_status_i        = 0;	const char *op_status  = xmlGetProp(event, XML_LRM_ATTR_OPSTATUS);	next_transition_timeout = transition_timeout;		if(op_status != NULL) {		op_status_i = atoi(op_status);	}		if(op_status_i == -1) {		/* just information that the action was sent */		crm_trace("Ignoring TE initiated updates");		return TRUE;	}	slist_iter(		synapse, synapse_t, graph, lpc,		/* lookup event */		slist_iter(			action, action_t, synapse->actions, lpc2,			action_id = match_graph_event(action, event);			if(action_id != -1) {				break;			}			);		if(action_id != -1) {			break;		}		);		if(action_id > -1) {		crm_xml_devel(event, "Event found");			} else if(action_id == -2) {		crm_xml_info(event, "Event found but failed");			} else if(event != NULL) {		/* unexpected event, trigger a pe-recompute */		/* possibly do this only for certain types of actions */		send_abort("Event not matched", event);		return FALSE;/*	} else { we dont care, a transition is starting */	}	process_trigger(action_id);		if(graph_complete) {		/* allow some slack until we are pretty sure nothing		 * else is happening		 */		crm_info("Transition complete");		print_state(TRUE);				if(transition_fuzz_timer->timeout > 0) {			crm_info("Allowing the system to stabilize for %d ms"				 " before S_IDLE transition",				 transition_fuzz_timer->timeout);			start_te_timer(transition_fuzz_timer);					} else {			send_success("complete");		}			} else {		/* restart the transition timer again */		crm_info("Transition not yet complete");		print_state(TRUE);		transition_timer->timeout = next_transition_timeout;		start_te_timer(transition_timer);	}	return TRUE;}