diff options
author | Krishnan Parthasarathi <kp@gluster.com> | 2011-09-05 20:14:21 +0530 |
---|---|---|
committer | Vijay Bellur <vijay@gluster.com> | 2011-09-12 03:59:07 -0700 |
commit | 417de9db670650edd96e82a6e43087bea49deeee (patch) | |
tree | b9c7bc5eba75c6158b9db072322cb0733a195ba7 | |
parent | 5d03ebd31f2984614ecdc8f117bd4599ade497d1 (diff) |
rpc: Need to keep ref when handling cbk in call_bail.
Change-Id: Ic944599cfa2696a0ae77105185d49fb510ce6fec
BUG: 3511
Reviewed-on: http://review.gluster.com/361
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.c | 5 |
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 b09f47ed3e8..0cf7fe96946 100644 --- a/rpc/rpc-lib/src/rpc-clnt.c +++ b/rpc/rpc-lib/src/rpc-clnt.c @@ -196,10 +196,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 (trav); } @@ -308,6 +310,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 tm *frame_sent_tm = NULL; @@ -337,12 +340,14 @@ 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); rpc_clnt_reply_deinit (trav->rpcreq, trav->rpcreq->conn->rpc_clnt->reqpool); + clnt = rpc_clnt_unref (clnt); list_del_init (&trav->list); mem_put (trav); } |