From e803a5b779b7d6d261a429d42343c0dc145795e3 Mon Sep 17 00:00:00 2001 From: Volker Lendecke 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 Reviewed-by: Jeremy Allison Bug: https://bugzilla.samba.org/show_bug.cgi?id=11312 --- 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.7.9.5