[PATCH] tstream: Make socketpair nonblocking

Volker Lendecke Volker.Lendecke at SerNet.DE
Wed Jun 3 08:43:43 MDT 2015


Hi!

According to https://bugzilla.samba.org/show_bug.cgi?id=11061#c20 this
*MIGHT* also fix that bug.

Volker

-- 
SerNet GmbH, Bahnhofsallee 1b, 37081 Göttingen
phone: +49-551-370000-0, fax: +49-551-370000-9
AG Göttingen, HRB 2816, GF: Dr. Johannes Loxen
http://www.sernet.de, mailto:kontakt at sernet.de
-------------- next part --------------
From 703bc3db6098676e6fbadaa07b7632cbdbe92571 Mon Sep 17 00:00:00 2001
From: Volker Lendecke <vl at samba.org>
Date: Wed, 3 Jun 2015 13:41:24 +0000
Subject: [PATCH] tstream: Make socketpair nonblocking

When we have a large RPC reply, we can't block in the RPC server.

Test: Do rpcclient netshareenumall with a thousand shares defined

Signed-off-by: Volker Lendecke <vl at samba.org>
---
 libcli/named_pipe_auth/npa_tstream.c | 25 ++++++++++++++++++++-----
 1 file changed, 20 insertions(+), 5 deletions(-)

diff --git a/libcli/named_pipe_auth/npa_tstream.c b/libcli/named_pipe_auth/npa_tstream.c
index 3d3f55e..3539202 100644
--- a/libcli/named_pipe_auth/npa_tstream.c
+++ b/libcli/named_pipe_auth/npa_tstream.c
@@ -1468,17 +1468,23 @@ int _tstream_npa_socketpair(uint16_t file_type,
 	fd1 = fds[0];
 	fd2 = fds[1];
 
+	rc = set_blocking(fd1, false);
+	if (rc == -1) {
+		goto close_fail;
+	}
+
+	rc = set_blocking(fd2, false);
+	if (rc == -1) {
+		goto close_fail;
+	}
+
 	rc = _tstream_npa_existing_socket(mem_ctx1,
 					  fd1,
 					  file_type,
 					  &stream1,
 					  location);
 	if (rc == -1) {
-		int sys_errno = errno;
-		close(fd1);
-		close(fd2);
-		errno = sys_errno;
-		return -1;
+		goto close_fail;
 	}
 
 	rc = _tstream_npa_existing_socket(mem_ctx2,
@@ -1498,4 +1504,13 @@ int _tstream_npa_socketpair(uint16_t file_type,
 	*pstream2 = stream2;
 
 	return 0;
+
+close_fail:
+	{
+		int sys_errno = errno;
+		close(fd1);
+		close(fd2);
+		errno = sys_errno;
+		return -1;
+	}
 }
-- 
1.9.1



More information about the samba-technical mailing list