CRM_DEBUG3("Sent welcome message to %s (%d)",
CRM_DEBUG("Sent welcome message to %s (%d)",
do_send_welcome(long long action,		enum crmd_fsa_cause cause,		enum crmd_fsa_state cur_state,		enum crmd_fsa_input current_input,		void *data){	int lpc = 0, size = 0, num_sent = 0;	oc_node_t *members;	gboolean was_sent = TRUE;	FNIN();	if(action & A_JOIN_WELCOME && data == NULL) {		cl_log(LOG_ERR,		       "Attempt to send welcome message "		       "without a message to reply to!");		FNRET(I_NULL);			} else if(action & A_JOIN_WELCOME) {		xmlNodePtr welcome = (xmlNodePtr)data;		const char *join_to = xmlGetProp(welcome, XML_ATTR_HOSTFROM);		if(join_to != NULL) {			send_request(NULL, NULL, CRM_OPERATION_WELCOME,				     join_to, CRM_SYSTEM_CRMD);		}				FNRET(I_NULL);	}// welcome everyone...	/* Give everyone a chance to join before invoking the PolicyEngine */	stopTimer(integration_timer);	startTimer(integration_timer);		members = fsa_membership_copy->members;	size = fsa_membership_copy->members_size;		if(joined_nodes != NULL) {		g_hash_table_destroy(joined_nodes);		joined_nodes = g_hash_table_new(&g_str_hash, &g_str_equal);			}		for(; members != NULL && lpc < size; lpc++) {		const char *new_node = members[lpc].node_uname;		if(strcmp(fsa_our_uname, new_node) == 0) {			// dont send one to ourselves			continue;		}		CRM_DEBUG3("Sending welcome message to %s (%d)",			   new_node, was_sent);		num_sent++;		was_sent = was_sent			&& send_request(NULL, NULL, CRM_OPERATION_WELCOME,					new_node, CRM_SYSTEM_CRMD);		CRM_DEBUG3("Sent welcome message to %s (%d)",			   new_node, was_sent);	}	if(was_sent == FALSE)		FNRET(I_FAIL);/* No point hanging around in S_INTEGRATION if we're the only ones here! */	if(num_sent == 0) {		// that was the last outstanding join ack)		cl_log(LOG_INFO,"That was the last outstanding join ack");		FNRET(I_SUCCESS);	} else {		cl_log(LOG_DEBUG,		       "Still waiting on %d outstanding join acks",		       num_sent);		//dont waste time by invoking the pe yet;	}		FNRET(I_NULL);}