crm_err("Delivery of reply to client %s failed", token);
crm_warn("Delivery of reply to client %s/%s failed", hash_client->name, token);
send_via_callback_channel(HA_Message *msg, const char *token) {	cib_client_t *hash_client = NULL;	GList *list_item = NULL;	enum cib_errors rc = cib_ok;		crm_devel("Delivering msg %p to client %s", msg, token);	if(token == NULL) {		crm_err("No client id token, cant send message");		if(rc == cib_ok) {			rc = cib_missing;		}			} else {		/* A client that left before we could reply is not really		 * _our_ error.  Warn instead.		 */		hash_client = g_hash_table_lookup(client_list, token);		if(hash_client == NULL) {			crm_warn("Cannot find client for token %s", token);			rc = cib_client_gone;					} else if(hash_client->channel == NULL) {			crm_err("Cannot find channel for client %s", token);			rc = cib_client_corrupt;		} else if(hash_client->channel->ops->get_chan_status(				  hash_client->channel) != IPC_CONNECT) {			crm_warn("Client %s has disconnected", token);			rc = cib_client_gone;		}	}	/* this is a more important error so overwriting rc is warrented */	if(msg == NULL) {		crm_err("No message to send");		rc = cib_reply_failed;	}	if(rc == cib_ok) {		list_item = g_list_find_custom(			hash_client->delegated_calls, msg, cib_GCompareFunc);	}		if(list_item != NULL) {		/* remove it - no need to time it out */		HA_Message *orig_msg = list_item->data;		crm_devel("Removing msg from delegated list");		hash_client->delegated_calls = g_list_remove(			hash_client->delegated_calls, orig_msg);		CRM_DEV_ASSERT(orig_msg != msg);		crm_msg_del(orig_msg);	}		if(rc == cib_ok) {		crm_devel("Delivering reply to client %s", token);		if(send_ipc_message(hash_client->channel, msg) == FALSE) {			crm_err("Delivery of reply to client %s failed", token);			rc = cib_reply_failed;		}	} else {		/* be consistent...		 * send_ipc_message() will free the message, so we should do		 *  so manually if we dont try to send it.		 */		crm_msg_del(msg);	}		return rc;}