{
while (dapls_cb_pending(&ep_ptr->req_buffer))
dapli_ep_flush_evd((DAPL_EVD *) ep_ptr->param.request_evd_handle);
-
while (dapls_cb_pending(&ep_ptr->recv_buffer))
dapli_ep_flush_evd((DAPL_EVD *) ep_ptr->param.recv_evd_handle);
}
DAT_RETURN dapls_ib_qp_free(IN DAPL_IA * ia_ptr, IN DAPL_EP * ep_ptr)
{
struct ibv_qp *qp;
+ struct ibv_qp_attr qp_attr;
#ifdef _OPENIB_CMA_
dp_ib_cm_handle_t cm_ptr = dapl_get_cm_from_ep(ep_ptr);
ep_ptr->qp_handle = NULL;
dapl_os_unlock(&ep_ptr->header.lock);
- /* force error state to flush queue, then destroy */
- dapls_modify_qp_state(qp, IBV_QPS_ERR, 0,0,0);
+ qp_attr.qp_state = IBV_QPS_ERR;
+ ibv_modify_qp(qp, &qp_attr, IBV_QP_STATE);
dapls_ep_flush_cqs(ep_ptr);
+ ep_ptr->qp_handle = NULL;
#ifdef _OPENIB_CMA_
rdma_destroy_qp(cm_ptr->cm_id);
cm_ptr->cm_id->qp = NULL;