return;
do_pe_invoke_callback(const HA_Message *msg, int call_id, int rc,		      crm_data_t *output, void *user_data){	HA_Message *cmd = NULL;	int ccm_transition_id = -1;	gboolean cib_has_quorum = FALSE;	crm_data_t *local_cib = find_xml_node(output, XML_TAG_CIB, TRUE);	if(call_id != fsa_pe_query) {		crm_debug_2("Skipping superceeded CIB query: %d (current=%d)",			    call_id, fsa_pe_query);		return;			} else if(AM_I_DC == FALSE	   || is_set(fsa_input_register, R_PE_CONNECTED) == FALSE) {		crm_debug("No need to invoke the PE anymore");		return;	} else if(need_transition(fsa_state) == FALSE) {		crm_debug("Discarding PE request in state: %s",			  fsa_state2string(fsa_state));	} else if(fsa_state != S_POLICY_ENGINE) {		crm_err("Invoking PE in state: %s",fsa_state2string(fsa_state));	}		crm_debug_2("Invoking %s with %p", CRM_SYSTEM_PENGINE, local_cib);	CRM_DEV_ASSERT(local_cib != NULL);	CRM_DEV_ASSERT(crm_element_value(local_cib, XML_ATTR_DC_UUID) != NULL);	cib_has_quorum = crm_is_true(		crm_element_value(local_cib, XML_ATTR_HAVE_QUORUM));	ccm_transition_id = crm_atoi(		crm_element_value(local_cib, XML_ATTR_CCM_TRANSITION), "-1");	if(ccm_transition_id < (int)fsa_membership_copy->id) {		/* the cib is behind */		crm_debug("Re-asking for the CIB until membership/quorum"			  " matches: CIB=%d < CRM=%d",			  ccm_transition_id, fsa_membership_copy->id);				mssleep(500);		register_fsa_action(A_PE_INVOKE);		return;	} else if(ccm_transition_id > (int)fsa_membership_copy->id) {		/* we are behind */		crm_info("Waiting for another CCM event before proceeding:"			 " CIB=%d > CRM=%d",			 ccm_transition_id, fsa_membership_copy->id);		return;	}		if(fsa_pe_ref) {		crm_free(fsa_pe_ref);		fsa_pe_ref = NULL;	}	cmd = create_request(		CRM_OP_PECALC, local_cib, NULL,		CRM_SYSTEM_PENGINE, CRM_SYSTEM_DC, NULL);	send_request(cmd, &fsa_pe_ref);	crm_debug("Invoking the PE: %s", fsa_pe_ref);}