tmp1 = find_xml_node(cib_fragment, XML_TAG_CIB); tmp1 = get_object_root(XML_CIB_TAG_STATUS, tmp1);
do_process_welcome_ack(long long action,		    enum crmd_fsa_cause cause,		    enum crmd_fsa_state cur_state,		    enum crmd_fsa_input current_input,		    void *data){	xmlNodePtr tmp1;	xmlNodePtr cib_fragment;	xmlNodePtr join_ack = (xmlNodePtr)data;	int size = 0;	gboolean is_a_member  = FALSE;	const char *join_from = xmlGetProp(join_ack, XML_ATTR_HOSTFROM);	const char *ref       = xmlGetProp(join_ack, XML_ATTR_REFERENCE);	FNIN();	gpointer join_node =		g_hash_table_lookup(fsa_membership_copy->members, join_from);	if(join_node != NULL) {		is_a_member = TRUE;	}		cib_fragment = find_xml_node(join_ack, XML_TAG_FRAGMENT);	if(is_a_member == FALSE) {		cl_log(LOG_ERR, "Node %s is not known to us (ref %s)",		       join_from, ref);		/* make sure any information from this node is discarded,		 * it is invalid		 */		free_xml(cib_fragment);		FNRET(I_FAIL);	}	cl_log(LOG_DEBUG, "Welcoming node %s after ACK (ref %s)",	       join_from, ref);		// add them to our list of "active" nodes	g_hash_table_insert(joined_nodes, strdup(join_from),strdup(join_from));	if(cib_fragment == NULL) {		cl_log(LOG_ERR,		       "No status information was part of the"		       " Welcome ACK from %s",		       join_from);		FNRET(I_NULL);	}		/* TODO: check the fragment is only for the status section	= get_xml_attr(cib_fragment, NULL,					   XML_ATTR_FILTER_TYPE, TRUE);	*/		/* Make changes so that state=active for this node when the update	 *  is processed by A_CIB_INVOKE	 */	tmp1 = find_xml_node(cib_fragment, XML_TAG_CIB);	tmp1 = get_object_root(XML_CIB_TAG_STATUS, tmp1);	tmp1 = find_entity(tmp1, XML_CIB_TAG_STATE, join_from, FALSE);	set_xml_property_copy(tmp1, "state", "active");		if(g_hash_table_size(joined_nodes)	   == fsa_membership_copy->members_size) {		// 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",		       size);		//dont waste time by invoking the pe yet;	}	FNRET(I_CIB_OP);}