CRM_DEBUG3("Sent welcome message to %s (%d)", new_node, was_sent);
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();	startTimer(integration_timer);		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;		xmlNodePtr options = find_xml_node(welcome, XML_TAG_OPTIONS);		set_xml_property_copy(options, XML_ATTR_OP, CRM_OPERATION_WELCOME);		send_ha_reply(fsa_cluster_connection, welcome, NULL);		FNRET(I_NULL);	}		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++) {#ifdef CCM_UNAME		const char *new_node = members[lpc].node_uname;#else		const char *new_node = "";#endif				if(strcmp(fsa_our_uname, new_node) == 0) {			// dont send one to ourselves			continue;		}		CRM_DEBUG2("Sending welcome message to %s", new_node);		num_sent++;		was_sent = was_sent			&& send_request(NULL, NULL, CRM_OPERATION_WELCOME,					new_node, CRM_SYSTEM_CRMD);	}	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);}