diff options
| author | Krishnan Parthasarathi <kp@gluster.com> | 2011-09-05 20:14:21 +0530 | 
|---|---|---|
| committer | Vijay Bellur <vijay@gluster.com> | 2011-09-20 02:06:03 -0700 | 
| commit | f46e13075f8f1a3ef171777c50446db32909db9c (patch) | |
| tree | 5205d1c70e9ec99befbfec09810295a650597591 | |
| parent | 83e7318961e622c10d25a7673b6dedc2f848785b (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.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 0b8c70fe5ab..4b6670e1591 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);  	}  | 
