if(num_join_invites <= (ssize_t)g_hash_table_size(confirmed_nodes)) {
if(g_hash_table_size(finalized_nodes) == 0) {
do_dc_join_ack(long long action,	       enum crmd_fsa_cause cause,	       enum crmd_fsa_state cur_state,	       enum crmd_fsa_input current_input,	       fsa_data_t *msg_data){	/* now update them to "member" */	crm_data_t *update = NULL;	ha_msg_input_t *join_ack = fsa_typed_data(fsa_dt_ha_msg);	const char *join_from = cl_get_string(join_ack->msg, F_CRM_HOST_FROM);	const char *op = cl_get_string(join_ack->msg, F_CRM_TASK);	const char *type = cl_get_string(join_ack->msg, F_SUBTYPE);	const char *join_state = NULL;	if(safe_str_neq(op, CRM_OP_JOINACK)) {		crm_warn("Ignoring op=%s message", op);		return I_NULL;	} else if(safe_str_eq(type, XML_ATTR_REQUEST)) {		crm_verbose("Ignoring request");		crm_log_message(LOG_VERBOSE, join_ack->msg);		return I_NULL;	}		crm_debug("Processing ack from %s", join_from);	join_state = (const char *)		g_hash_table_lookup(join_requests, join_from);		if(join_state == NULL) {		crm_err("Join not in progress: ignoring join from %s",			join_from);		register_fsa_error(C_FSA_INTERNAL, I_FAIL, NULL);		return I_NULL;			} else if(safe_str_neq(join_state, CRMD_JOINSTATE_MEMBER)) {		crm_err("Node %s wasnt invited to join the cluster",join_from);		return I_NULL;	}		g_hash_table_insert(confirmed_nodes, crm_strdup(join_from),			    crm_strdup(CRMD_JOINSTATE_MEMBER));	/* the updates will actually occur in reverse order because of	 * the LIFO nature of the fsa input queue	 */		/* update CIB with the current LRM status from the node */	update_local_cib(copy_xml_node_recursive(join_ack->xml));	/* update node entry in the status section  */	crm_info("Updating node state to %s for %s", join_state, join_from);	update = create_node_state(		join_from, join_from,		ACTIVESTATUS, NULL, ONLINESTATUS, join_state, join_state);	set_xml_property_copy(update,XML_CIB_ATTR_EXPSTATE, CRMD_STATE_ACTIVE);	update_local_cib(create_cib_fragment(update, NULL));	if(num_join_invites <= (ssize_t)g_hash_table_size(confirmed_nodes)) {		crm_info("That was the last outstanding join confirmation");		register_fsa_input_later(C_FSA_INTERNAL, I_FINALIZED, NULL);				return I_NULL;	}	/* dont waste time by invoking the pe yet; */	crm_debug("Still waiting on %d outstanding join confirmations",		  num_join_invites - g_hash_table_size(confirmed_nodes));		return I_NULL;}