From bddb3a014af22133d958da96ad32a02f8ff66805 Mon Sep 17 00:00:00 2001 From: Pranith Kumar K Date: Mon, 19 Dec 2011 18:35:19 +0530 Subject: 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 Reviewed-on: http://review.gluster.com/809 Tested-by: Gluster Build System Reviewed-by: Jeff Darcy Reviewed-by: Vijay Bellur --- xlators/protocol/server/src/server.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'xlators/protocol/server/src/server.c') 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; } -- cgit