[PATCH] tstream: Make socketpair nonblocking

Jeremy Allison jra at samba.org
Wed Jun 3 10:25:58 MDT 2015


On Wed, Jun 03, 2015 at 04:43:43PM +0200, Volker Lendecke wrote:
> Hi!
> 
> According to https://bugzilla.samba.org/show_bug.cgi?id=11061#c20 this
> *MIGHT* also fix that bug.
> 
> Volker

Now that is a really *interesting* fix ! However did you find
that ? Customer with 1000+ shares ? :-).

Reviewed-by: Jeremy Allison <jra at samba.org>

+ pushed.

> 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