ucma_destroy_cqs() destroys both the send and recv CQs if they
are non-null. If the two CQs are actually the same one, this
results in a crash when trying to destroy the second CQ. Check
that the CQs are different before destroying the second CQ.
This fixes a crash when using rsockets, which sets the send and
recv CQs to the same CQ.
Signed-off-by: Sean Hefty <sean.hefty@intel.com>
if (id->recv_cq_channel)
ibv_destroy_comp_channel(id->recv_cq_channel);
- if (id->send_cq)
+ if (id->send_cq && (id->send_cq != id->recv_cq))
ibv_destroy_cq(id->send_cq);
- if (id->send_cq_channel)
+ if (id->send_cq_channel && (id->send_cq_channel != id->recv_cq_channel))
ibv_destroy_comp_channel(id->send_cq_channel);
}
rdma_dereg_mr(rs->target_mr);
if (rs->cm_id) {
- if (rs->cm_id->qp) {
- rs->cm_id->send_cq_channel = NULL;
- rs->cm_id->send_cq = NULL;
+ if (rs->cm_id->qp)
rdma_destroy_qp(rs->cm_id);
- }
rdma_destroy_id(rs->cm_id);
}