g_slist_length(action->actions_before), g_slist_length(action->actions_after));
g_list_length(action->actions_before), g_list_length(action->actions_after));
print_action(const char *pre_text, action_t *action, gboolean details){ 	if(action == NULL) {		crm_debug("%s%s: <NULL>",		       pre_text==NULL?"":pre_text,		       pre_text==NULL?"":": ");		return;	}	switch(action->task) {		case stonith_op:		case shutdown_crm:			crm_debug("%s%s%sAction %d: %s @ %s",			       pre_text==NULL?"":pre_text,			       pre_text==NULL?"":": ",			       action->discard?"Discarded ":action->optional?"Optional ":action->runnable?action->processed?"":"(Provisional) ":"!!Non-Startable!! ",			       action->id,			       task2text(action->task),			       safe_val4(NULL, action, node, details, id));			break;		default:			crm_debug("%s%s%sAction %d: %s %s @ %s",			       pre_text==NULL?"":pre_text,			       pre_text==NULL?"":": ",			       action->optional?"Optional ":action->runnable?action->processed?"":"(Provisional) ":"!!Non-Startable!! ",			       action->id,			       task2text(action->task),			       safe_val3(NULL, action, rsc, id),			       safe_val4(NULL, action, node, details, id));						break;	}	if(details) {		int lpc = 0;#if 1		crm_debug("\t\t====== Preceeding Actions");		slist_iter(			other, action_wrapper_t, action->actions_before, lpc,			print_action("\t\t", other->action, FALSE);			);		crm_debug("\t\t====== Subsequent Actions");		slist_iter(			other, action_wrapper_t, action->actions_after, lpc,			print_action("\t\t", other->action, FALSE);			);		#else		crm_debug("\t\t====== Subsequent Actions");		slist_iter(			other, action_wrapper_t, action->actions_after, lpc,			print_action("\t\t", other->action, FALSE);			);		#endif		crm_debug("\t\t====== End");	} else {		crm_debug("\t\t(seen=%d, before=%d, after=%d)",		       action->seen_count,		       g_slist_length(action->actions_before),		       g_slist_length(action->actions_after));	}}