Blob Blame History Raw
From b5ee02c228e4b0856d8479d436011eeab5ec57c5 Mon Sep 17 00:00:00 2001
From: Kaushal M <kaushal@redhat.com>
Date: Mon, 16 May 2016 15:15:49 +0530
Subject: [PATCH 136/141] rpc/socket: Close pipe on disconnection

Encrypted connections create a pipe, which isn't closed when the
connection disconnects. This leaks fds, and gluster eventually ends up
in a situation with fd starvation which leads to operation failures.

>Reviewed-on: http://review.gluster.org/14356
>Tested-by: MOHIT AGRAWAL <moagrawa@redhat.com>
>Smoke: Gluster Build System <jenkins@build.gluster.org>
>CentOS-regression: Gluster Build System <jenkins@build.gluster.org>
>NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
>Reviewed-by: Raghavendra G <rgowdapp@redhat.com>

Change-Id: I144e1f767cec8c6fc1aa46b00cd234129d2a4adc
BUG: 1381822
Signed-off-by: Kaushal M <kaushal@redhat.com>
Reviewed-on: https://code.engineering.redhat.com/gerrit/87981
Tested-by: Mohit Agrawal <moagrawa@redhat.com>
Reviewed-by: Mohit Agrawal <moagrawa@redhat.com>
Reviewed-by: Atin Mukherjee <amukherj@redhat.com>
---
 rpc/rpc-transport/socket/src/socket.c |    9 ++++++++-
 1 files changed, 8 insertions(+), 1 deletions(-)

diff --git a/rpc/rpc-transport/socket/src/socket.c b/rpc/rpc-transport/socket/src/socket.c
index 700157e..4244883 100644
--- a/rpc/rpc-transport/socket/src/socket.c
+++ b/rpc/rpc-transport/socket/src/socket.c
@@ -2567,10 +2567,17 @@ err:
         __socket_teardown_connection (this);
         sys_close (priv->sock);
         priv->sock = -1;
+
+        sys_close (priv->pipe[0]);
+        sys_close (priv->pipe[1]);
+        priv->pipe[0] = -1;
+        priv->pipe[1] = -1;
+
         priv->ot_state = OT_IDLE;
+
         pthread_mutex_unlock(&priv->lock);
-        rpc_transport_notify (this, RPC_TRANSPORT_DISCONNECT, this);
 
+        rpc_transport_notify (this, RPC_TRANSPORT_DISCONNECT, this);
 
         rpc_transport_unref (this);
 
-- 
1.7.1