if(action == NULL) {
if(matched_action_list == NULL) {
process_graph_event(const char *event_node,		    const char *event_rsc, 		    const char *event_action, 		    const char *event_status, 		    const char *event_rc){	int lpc;	xmlNodePtr action        = NULL; // <rsc_op> or <crm_event>	xmlNodePtr next_action   = NULL;// Find the action corresponding to this event	slist_iter(		action_list, action_list_t, graph, lpc,		action = g_slist_nth_data(action_list->actions,					  action_list->index);/*		<rsc_op id= runnable= optional= task= on_node= >			<resource id="rsc3" priority="3.0"/>		</rsc_op>*/		const char *this_action = xmlGetProp(action, "task");		const char *this_node   = xmlGetProp(action, "on_node");		const char *this_rsc    = xmlGetProp(action->children, "id");		if(safe_str_neq(this_node, event_node)) {			continue;		} else if(safe_str_neq(this_action, event_action)) {			continue;					} else if(safe_str_eq(action->name, "rsc_op")			  && safe_str_eq(this_rsc, event_rsc)) {			action_list->index++;			next_action = g_slist_nth_data(action_list->actions,						       action_list->index);		} else if(safe_str_eq(action->name, "crm_event")) {			action_list->index++;			next_action = g_slist_nth_data(action_list->actions,						       action_list->index);					}		);	// for the moment all actions succeed		if(action == NULL) {		// unexpected event, trigger a pe-recompute		// possibly do this only for certain types of actions		send_abort();			} else if(next_action == NULL) {		/* last action in that list, check if there are		 *  anymore actions at all		 */		gboolean more_to_do = FALSE;		slist_iter(			action_list, action_list_t, graph, lpc,			if(action_list->index <= action_list->index_max){				more_to_do = TRUE;				break;			}			);		if(more_to_do == FALSE) {			// indicate to the CRMd that we're done			xmlNodePtr options = create_xml_node(NULL, "options");			set_xml_property_copy(options, XML_ATTR_OP, "te_complete");			send_ipc_request(crm_ch, options, NULL,					 NULL, "dc", "tengine",					 NULL, NULL);						free_xml(options);			return TRUE;		} // else wait for the next event	} else {		return initiate_action(next_action);	}		return FALSE;}