diff options
author | Pranith Kumar K <pranithk@gluster.com> | 2011-12-19 18:35:19 +0530 |
---|---|---|
committer | Vijay Bellur <vijay@gluster.com> | 2011-12-22 05:13:08 -0800 |
commit | bddb3a014af22133d958da96ad32a02f8ff66805 (patch) | |
tree | 11be405709768641d7cc4f18a3d0938fb7801bea /xlators/protocol/server/src/server.c | |
parent | 23495efe35515891cc56b49ef967d5b1ba195e3e (diff) |
protocol/server: Do connection cleanup if reply fails
We observed that after the first connection cleanup happens on
DISCONNECT the lock calls in transit are granted or added in
blocked locks queue. These locks were never cleaned up after that
because no unlock would come up on that connection. This would
leave references on that transport so it would never be destroyed.
Now, the connection cleanup happens whenever the reply
submission fails.
Also cleaned up the old code which is not used any more.
Change-Id: Ie4fe6f388ed18d9c907cf8ae06b0b7fd0601a660
BUG: 765430
Signed-off-by: Pranith Kumar K <pranithk@gluster.com>
Reviewed-on: http://review.gluster.com/809
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Jeff Darcy <jdarcy@redhat.com>
Reviewed-by: Vijay Bellur <vijay@gluster.com>
Diffstat (limited to 'xlators/protocol/server/src/server.c')
-rw-r--r-- | xlators/protocol/server/src/server.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/xlators/protocol/server/src/server.c b/xlators/protocol/server/src/server.c index e9f2818200f..d767199d0a7 100644 --- a/xlators/protocol/server/src/server.c +++ b/xlators/protocol/server/src/server.c @@ -98,12 +98,14 @@ server_submit_reply (call_frame_t *frame, rpcsvc_request_t *req, void *arg, struct iovec rsp = {0,}; server_state_t *state = NULL; char new_iobref = 0; + server_connection_t *conn = NULL; GF_VALIDATE_OR_GOTO ("server", req, ret); if (frame) { state = CALL_STATE (frame); frame->local = NULL; + conn = SERVER_CONNECTION(frame); } if (!iobref) { @@ -138,6 +140,8 @@ server_submit_reply (call_frame_t *frame, rpcsvc_request_t *req, void *arg, iobuf_unref (iob); if (ret == -1) { gf_log_callingfn ("", GF_LOG_ERROR, "Reply submission failed"); + if (frame && conn) + server_connection_cleanup (frame->this, conn); goto ret; } |