cm_dreq.flags = IB_FLAGS_SYNC;
cm_dreq.qp_type = IB_QPT_RELIABLE_CONN;
- cm_dreq.h_qp = h_cm->h_qp;
+ cm_dreq.h_qp = h_cm.h_qp;
cm_dreq.pfn_cm_drep_cb = dapli_ib_cm_drep_cb;
return dapl_ib_status_convert(ib_cm_dreq(&cm_dreq));
ib_cm_drep_t cm_drep;
dapl_os_memzero(&cm_drep, sizeof(ib_cm_drep_t));
- return dapl_ib_status_convert(ib_cm_drep(&cm_drep));
+ return dapl_ib_status_convert(ib_cm_drep(h_cm, &cm_drep));
}
/*
{
dapl_dbg_log (DAPL_DBG_TYPE_ERR,
"--> %s: BAD_PTR EP %lx\n", __FUNCTION__, ep_ptr);
- goto err;
+ goto send_drep;
}
if ( ep_ptr->header.magic != DAPL_MAGIC_EP )
{
if ( ep_ptr->header.magic == DAPL_MAGIC_INVALID )
- goto err;
+ goto send_drep;
dapl_dbg_log (DAPL_DBG_TYPE_ERR,
"--> %s: EP %p BAD_EP_MAGIC %x != wanted %x\n",
__FUNCTION__, ep_ptr, ep_ptr->header.magic,
DAPL_MAGIC_EP );
- goto err;
+ goto send_drep;
}
cm_ptr = dapl_get_cm_from_ep(ep_ptr);
if (!cm_ptr)
{
dapl_dbg_log (DAPL_DBG_TYPE_ERR,
"--> %s: !CM_PTR on EP %p\n", __FUNCTION__, ep_ptr);
- goto err;
+ goto send_drep;
}
dapl_os_assert(cm_ptr->ib_cm.h_qp == p_cm_dreq_rec->h_cm_dreq.h_qp);
dapl_os_lock (&ep_ptr->header.lock);
if ( ep_ptr->param.ep_state == DAT_EP_STATE_DISCONNECTED )
{
- dapl_os_unlock (&ep_ptr->header.lock);
dapl_dbg_log (DAPL_DBG_TYPE_CM,
"--> DiCDcb: EP %lx QP %lx already Disconnected\n",
ep_ptr, ep_ptr->qp_handle);
- goto err;
+ goto unlock;
}
ep_ptr->param.ep_state = DAT_EP_STATE_DISCONNECT_PENDING;
}
return;
-err:
+unlock:
+ dapl_os_unlock (&ep_ptr->header.lock);
+send_drep:
dapli_send_ib_cm_drep(p_cm_dreq_rec->h_cm_dreq);
}