[PATCH] tstream: Make socketpair nonblocking

Christof Schmitt cs at samba.org
Wed Jun 3 17:06:10 MDT 2015


On Wed, Jun 03, 2015 at 09:25:58AM -0700, Jeremy Allison wrote:
> 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.

Actually, 600 shares is sufficient to trigger this problem :-)

I opened a bugzilla to backport this patch. Can you include
BUG: https://bugzilla.samba.org/show_bug.cgi?id=11312
before pushing again?

Christof
> 
> > 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