case MCM_RTU_PENDING: /* passive */
mlog(2, "RTU_PENDING: cm %p, my_id %d, cm_id %d\n",
cm, cm->entry.tid, cm->cm_id);
+ cm->state = MCM_CONNECTED;
mpxy_unlock(&cm->lock);
MCNTR(md, MCM_CM_RTU_IN);
mix_cm_rtu_in(cm, msg, len);
mlog(0, " ERR: snd on new_ep %d, ret %d, exp %d\n", op_ep, ret, len);
if (smd) {
mix_close_device(smd->md, smd);
- return;
+ smd = NULL;
}
}
mpxy_lock(&m_cm->smd->evlock);
if (scif_send_msg(m_cm->smd->scif_ev_ep, (void*)&msg, len)) {
mpxy_unlock(&m_cm->smd->evlock);
+ mcm_cm_disc(m_cm);
return -1;
}
mpxy_unlock(&m_cm->smd->evlock);
- mpxy_lock(&m_cm->lock);
- m_cm->state = MCM_CONNECTED;
- mpxy_unlock(&m_cm->lock);
return 0;
}
ntohl(wc[i].imm_data), m_qp->ib_qp2->state);
continue;
}
- if (m_qp->cm && (m_qp->cm->state != MCM_CONNECTED)) {
- mlog(1," WARN: RX data on DISC m_qp %p qp1 %p qp2 %p\n",
+ if (m_qp->cm && (m_qp->cm->state == MCM_DISCONNECTED)) {
+ mlog(1," WARN: RX data on DISC m_qp %p qp1 %p qp2 %p %s\n",
m_qp, m_qp->ib_qp1, m_qp->ib_qp2,
mcm_state_str(m_qp->cm->state));
continue;