} else if(safe_str_eq(other->action->task, CRMD_ACTION_START)) { const char *interval = g_hash_table_lookup( action->extra, "interval"); int interval_i = 0; if(interval != NULL) { interval_i = atoi(interval); if(interval_i > 0) { crm_debug_3("Ignoring: start + recurring"); continue; } }
update_action(action_t *action){	gboolean change = FALSE;	enum action_tasks task = no_action;		crm_debug_3("Processing action %d: %s",		    action->id, action->optional?"optional":"required");#if UPDATE_THEM	slist_iter(		other, action_wrapper_t, action->actions_before, lpc,		crm_debug_3("\tChecking action %d: %s/%s",			    other->action->id, ordering_type2text(other->type),			    other->action->optional?"optional":"required");		if(other->type == pe_ordering_manditory) {					} else if(other->type == pe_ordering_restart			  && action->rsc->start_pending == FALSE) {		} else {			crm_debug_3("\t  Ignoring: %s",				    ordering_type2text(other->type));			continue;					}		if(action->optional || other->action->optional == FALSE) {			crm_debug_3("\t  Ignoring: %s/%s",				    other->action->optional?"-":"they are not optional",				    action->optional?"we are optional":"-");			continue;		}		other->action->optional = FALSE;		crm_debug_2("* Marking action %d manditory because of %d",			    other->action->id, action->id);		update_action(other->action);		);#else	slist_iter(		other, action_wrapper_t, action->actions_before, lpc,		crm_debug_3("\tChecking action %d: %s/%s",			    other->action->id, ordering_type2text(other->type),			    other->action->optional?"optional":"required");		if(other->type != pe_ordering_manditory) {			crm_debug_3("\t  Ignoring: %s",				    ordering_type2text(other->type));			continue;		} else if(other->action->optional || action->optional == FALSE) {			crm_debug_3("\t  Ignoring: %s/%s",				    other->action->optional?"they are optional":"-",				    action->optional?"-":"we are not optional");			continue;		}		change = TRUE;		action->optional = FALSE;		crm_debug_2("* Marking action %d manditory because of %d",			    action->id, other->action->id);		);#endif	slist_iter(		other, action_wrapper_t, action->actions_after, lpc,				if(action->pseudo == FALSE && action->runnable == FALSE) {			if(other->action->runnable == FALSE) {				crm_debug_2("Action %d already un-runnable",					  other->action->id);			} else if(action->optional == FALSE) {				other->action->runnable = FALSE;				crm_debug_2("Marking action %d un-runnable"					  " because of %d",					  other->action->id, action->id);				update_action(other->action);			}		}		crm_debug_3("\t(Recover) Checking action %d: %s/%s",			    other->action->id, ordering_type2text(other->type),			    other->action->optional?"optional":"required");		if(other->action->rsc == NULL) {			continue;					} else if(other->type == pe_ordering_recover) {			if(other->action->rsc->restart_type != pe_restart_restart) {				crm_debug_3("\t  Ignoring: restart type %d",					    other->action->rsc->restart_type);				continue;			}					} else if(other->type == pe_ordering_restart) {			if(action->rsc != other->action->rsc) {				crm_err("Unexpected!");				continue;			}		} else {			crm_debug_3("\t  Ignoring: ordering %s",				    ordering_type2text(other->type));			continue;		}				if(other->action->optional == FALSE || action->optional) {			crm_debug_3("\t  Ignoring: %s/%s",				    action->optional?"we are optional":"-",				    other->action->optional?"-":"they are not optional");			continue;		}		task = text2task(action->task);		switch(task) {			case stop_rsc:			case stopped_rsc:				crm_debug_3("\t  Ignoring: action %s",					    action->task);				break;			case start_rsc:			case started_rsc:				crm_debug_2("* (Recover) Marking action %d"					    " manditory because of %d",					    other->action->id, action->id);				other->action->optional = FALSE; 				update_action(other->action);				break;			default:				crm_debug_3("\t  Ignoring: action %s",					    action->task);				break;		}		);	if(change) {		update_action(action);	}	crm_debug_3("Action %d: %s", action->id, change?"update":"untouched");	return change;}