crm_debug("Action %d has timer set to %d",
crm_devel("Action %d has timer set to %d",
unpack_action(crm_data_t *xml_action) {	const char *tmp        = crm_element_value(xml_action, XML_ATTR_ID);	action_t   *action     = NULL;	crm_data_t *action_copy = NULL;	if(tmp == NULL) {		crm_err("Actions must have an id!");		crm_xml_devel(xml_action, "Action with missing id");		return NULL;	}		action_copy = copy_xml_node_recursive(xml_action);	crm_malloc(action, sizeof(action_t));	if(action == NULL) {		return NULL;	}		action->id       = atoi(tmp);	action->timeout  = 0;	action->timer    = NULL;	action->invoked  = FALSE;	action->complete = FALSE;	action->can_fail = FALSE;	action->type     = action_type_rsc;	action->xml      = action_copy;		if(safe_str_eq(crm_element_name(action_copy), XML_GRAPH_TAG_RSC_OP)) {		action->type = action_type_rsc;	} else if(safe_str_eq(crm_element_name(action_copy), XML_GRAPH_TAG_PSEUDO_EVENT)) {		action->type = action_type_pseudo;	} else if(safe_str_eq(crm_element_name(action_copy), XML_GRAPH_TAG_CRM_EVENT)) {		action->type = action_type_crm;	}	tmp = crm_element_value(action_copy, XML_ATTR_TIMEOUT);	if(tmp != NULL) {		action->timeout = atoi(tmp);	}	crm_debug("Action %d has timer set to %d",		  action->id, action->timeout);		crm_malloc(action->timer, sizeof(te_timer_t));	action->timer->timeout   = action->timeout;	action->timer->source_id = -1;	action->timer->reason    = timeout_action;	action->timer->action    = action;	tmp = crm_element_value(action_copy, "can_fail");	if(safe_str_eq(tmp, XML_BOOLEAN_TRUE)) {		action->can_fail = TRUE;	}	return action;}