IN DAPL_EP *ep_ptr )
{
- ib_qp_handle_t qp_handle;
UNREFERENCED_PARAMETER(ia_ptr);
dapl_dbg_log (DAPL_DBG_TYPE_EP, "--> DsQF: free %p, state %s\n",
ep_ptr->qp_handle,
ib_get_port_state_str(ep_ptr->qp_state));
- if (( ep_ptr->qp_handle != IB_INVALID_HANDLE ) &&
- ( ep_ptr->qp_state != DAPL_QP_STATE_UNATTACHED ))
+ dapl_os_lock(&ep_ptr->header.lock);
+ if (( ep_ptr->qp_handle != IB_INVALID_HANDLE ))
{
- qp_handle = ep_ptr->qp_handle;
- ep_ptr->qp_handle = IB_INVALID_HANDLE;
- ep_ptr->qp_state = DAPL_QP_STATE_UNATTACHED;
- ib_destroy_qp ( qp_handle, NULL /* callback */);
+ ib_destroy_qp ( ep_ptr->qp_handle, ib_sync_destroy );
dapl_dbg_log (DAPL_DBG_TYPE_EP, "--> DsQF: freed QP %p\n",
- qp_handle );
+ ep_ptr->qp_handle );
+ ep_ptr->qp_handle = IB_INVALID_HANDLE;
}
+ dapl_os_unlock(&ep_ptr->header.lock);
return DAT_SUCCESS;
}
*/
REMOVE_REFERENCE (&p_ca->refs);
+ (void) ib_close_ca (p_ca->h_ca, ib_sync_destroy);
+
cl_spinlock_destroy (&p_ca->port_lock);
cl_spinlock_destroy (&p_ca->evd_cb_lock);
if (p_ca->p_ca_attr)
dapl_os_free (p_ca->p_ca_attr, sizeof (ib_ca_attr_t));
- (void) ib_close_ca (p_ca->h_ca, NULL /* close_callback */);
-
p_hca->ib_hca_handle = IB_INVALID_HANDLE;
dapl_os_free (p_ca, sizeof (dapl_ibal_ca_t));