summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--rpc/rpc-transport/rdma/src/rdma.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/rpc/rpc-transport/rdma/src/rdma.c b/rpc/rpc-transport/rdma/src/rdma.c
index d5d93d13481..26cf201a8a3 100644
--- a/rpc/rpc-transport/rdma/src/rdma.c
+++ b/rpc/rpc-transport/rdma/src/rdma.c
@@ -3032,7 +3032,7 @@ gf_rdma_unregister_peer(gf_rdma_device_t *device, int32_t qp_num)
ent = qpreg->ents[hash].next;
while ((ent != &qpreg->ents[hash]) && (ent->qp_num != qp_num))
ent = ent->next;
- if (ent->qp_num != qp_num) {
+ if ((ent->qp_num != qp_num) || (ent == &qpreg->ents[hash])) {
pthread_mutex_unlock(&qpreg->lock);
return;
}
@@ -3311,9 +3311,6 @@ gf_rdma_decode_error_msg(gf_rdma_peer_t *peer, gf_rdma_post_t *post,
goto out;
}
- iobref_add(iobref, iobuf);
- iobuf_unref(iobuf);
-
ret = rpc_reply_to_xdr(&rpc_msg, iobuf_ptr(iobuf), iobuf_pagesize(iobuf),
&post->ctx.vector[0]);
if (ret == -1) {
@@ -3324,6 +3321,9 @@ gf_rdma_decode_error_msg(gf_rdma_peer_t *peer, gf_rdma_post_t *post,
goto out;
}
+ iobref_add(iobref, iobuf);
+ iobuf_unref(iobuf);
+
post->ctx.count = 1;
iobuf = NULL;
@@ -3445,7 +3445,8 @@ out:
GF_FREE(*readch);
*readch = NULL;
}
-
+ if (reply_info)
+ GF_FREE(reply_info);
GF_FREE(write_ary);
}
@@ -3553,10 +3554,10 @@ gf_rdma_do_reads(gf_rdma_peer_t *peer, gf_rdma_post_t *post,
}
}
+ ptr = iobuf_ptr(iobuf);
iobref_add(post->ctx.iobref, iobuf);
iobuf_unref(iobuf);
- ptr = iobuf_ptr(iobuf);
iobuf = NULL;
pthread_mutex_lock(&priv->write_mutex);