summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKrishnan Parthasarathi <kp@gluster.com>2011-09-05 20:14:21 +0530
committerVijay Bellur <vijay@gluster.com>2011-09-20 02:06:03 -0700
commitf46e13075f8f1a3ef171777c50446db32909db9c (patch)
tree5205d1c70e9ec99befbfec09810295a650597591
parent83e7318961e622c10d25a7673b6dedc2f848785b (diff)
rpc: Need to keep ref when handling cbk in call_bail.
Change-Id: Ic944599cfa2696a0ae77105185d49fb510ce6fec BUG: 3511 Reviewed-on: http://review.gluster.com/397 Tested-by: Gluster Build System <jenkins@build.gluster.com> Reviewed-by: Vijay Bellur <vijay@gluster.com>
-rw-r--r--rpc/rpc-lib/src/rpc-clnt.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/rpc/rpc-lib/src/rpc-clnt.c b/rpc/rpc-lib/src/rpc-clnt.c
index 0b8c70f..4b6670e 100644
--- a/rpc/rpc-lib/src/rpc-clnt.c
+++ b/rpc/rpc-lib/src/rpc-clnt.c
@@ -198,10 +198,12 @@ call_bail (void *data)
trav->rpcreq->procnum, trav->rpcreq->xid, frame_sent,
conn->frame_timeout);
+ clnt = rpc_clnt_ref (clnt);
trav->rpcreq->rpc_status = -1;
trav->rpcreq->cbkfn (trav->rpcreq, &iov, 1, trav->frame);
rpc_clnt_reply_deinit (trav->rpcreq, clnt->reqpool);
+ clnt = rpc_clnt_unref (clnt);
list_del_init (&trav->list);
mem_put (conn->rpc_clnt->saved_frames_pool, trav);
}
@@ -311,6 +313,7 @@ __saved_frame_get (struct saved_frames *frames, int64_t callid)
void
saved_frames_unwind (struct saved_frames *saved_frames)
{
+ struct rpc_clnt *clnt = NULL;
struct saved_frame *trav = NULL;
struct saved_frame *tmp = NULL;
struct mem_pool *saved_frames_pool = NULL;
@@ -340,6 +343,7 @@ saved_frames_unwind (struct saved_frames *saved_frames)
trav->rpcreq->procnum, timestr);
saved_frames->count--;
+ clnt = rpc_clnt_ref (trav->rpcreq->conn->rpc_clnt);
trav->rpcreq->rpc_status = -1;
trav->rpcreq->cbkfn (trav->rpcreq, &iov, 1, trav->frame);
@@ -348,6 +352,7 @@ saved_frames_unwind (struct saved_frames *saved_frames)
rpc_clnt_reply_deinit (trav->rpcreq,
trav->rpcreq->conn->rpc_clnt->reqpool);
+ clnt = rpc_clnt_unref (clnt);
list_del_init (&trav->list);
mem_put (saved_frames_pool, trav);
}