};
};
+#define RS_RECV_WR_ID ~NULL
/*
* rsocket states are ordered as passive, connecting, connected, disconnected.
*/
return ret;
for (i = 0; i < rs->rq_size; i++) {
- ret = rdma_post_recvv(rs->cm_id, NULL, NULL, 0);
+ ret = rdma_post_recvv(rs->cm_id, RS_RECV_WR_ID, NULL, 0);
if (ret)
return ret;
}
int ret, rcnt = 0;
while ((ret = ibv_poll_cq(rs->cm_id->recv_cq, 1, &wc)) > 0) {
- if (wc.opcode == IBV_WC_RECV_RDMA_WITH_IMM) {
+ if (wc.wr_id == RS_RECV_WR_ID) {
if (wc.status != IBV_WC_SUCCESS)
continue;
rcnt++;
if (rs->state & rs_connected) {
while (!ret && rcnt--)
- ret = rdma_post_recvv(rs->cm_id, NULL, NULL, 0);
+ ret = rdma_post_recvv(rs->cm_id, RS_RECV_WR_ID, NULL, 0);
if (ret) {
rs->state = rs_error;
int ctrl, ret = 0;
rs = idm_at(&idm, socket);
+ printf("rshutdown %d - %p {\n", socket, rs);
if (how == SHUT_RD) {
rs_shutdown_state(rs, rs_connect_rd);
return 0;
RS_CTRL_SHUTDOWN : RS_CTRL_DISCONNECT;
}
if (!rs_can_send_ctrl(rs)) {
+ printf(" rshutdown - need ctrl msg %d - %p\n", socket, rs);
ret = rs_process_cq(rs, 0, rs_can_send_ctrl);
+ printf(" rshutdown - have ctrl msg %d - %p\n", socket, rs);
if (ret)
return ret;
}
ret = rs_post_write(rs, 0, NULL, 0,
rs_msg_set(RS_OP_CTRL, ctrl),
0, 0, 0);
+ if (ret)
+ printf("rs_post_write failed %d %s\n", ret, strerror(errno));
}
if (!rs_all_sends_done(rs) && !(rs->state & rs_error))
+ {
+ printf(" rshutdown - need sends %d - %p\n", socket, rs);
rs_process_cq(rs, 0, rs_all_sends_done);
+ printf(" rshutdown - have sends %d - %p\n", socket, rs);
+ }
if ((rs->fd_flags & O_NONBLOCK) && (rs->state & rs_connected))
rs_set_nonblocking(rs, 1);
+ printf("} rshutdown %d - %p\n", socket, rs);
return 0;
}
struct rsocket *rs;
rs = idm_at(&idm, socket);
+ printf("rclose %d - %p {\n", socket, rs);
if (rs->state & rs_connected)
rshutdown(socket, SHUT_RDWR);
+ printf("} rclose %d - %p\n", socket, rs);
rs_free(rs);
return 0;
}