On Mon, Dec 18, 2017 at 02:46:32PM +0100, Martin Pieuchot wrote: > Diff below remove an unnecessary unlock/relock dance when following the > 'goto restart'. > > ok?
OK bluhm@ > Index: kern/uipc_socket.c > =================================================================== > RCS file: /cvs/src/sys/kern/uipc_socket.c,v > retrieving revision 1.211 > diff -u -p -r1.211 uipc_socket.c > --- kern/uipc_socket.c 18 Dec 2017 10:07:55 -0000 1.211 > +++ kern/uipc_socket.c 18 Dec 2017 13:41:06 -0000 > @@ -668,8 +668,8 @@ bad: > if (mp) > *mp = NULL; > > -restart: > s = solock(so); > +restart: > if ((error = sblock(so, &so->so_rcv, SBLOCKWAIT(flags))) != 0) { > sounlock(s); > return (error); > @@ -738,9 +738,10 @@ restart: > SBLASTMBUFCHK(&so->so_rcv, "soreceive sbwait 1"); > sbunlock(so, &so->so_rcv); > error = sbwait(so, &so->so_rcv); > - sounlock(s); > - if (error) > + if (error) { > + sounlock(s); > return (error); > + } > goto restart; > } > dontblock: > @@ -994,7 +995,6 @@ dontblock: > if (orig_resid == uio->uio_resid && orig_resid && > (flags & MSG_EOR) == 0 && (so->so_state & SS_CANTRCVMORE) == 0) { > sbunlock(so, &so->so_rcv); > - sounlock(s); > goto restart; > } >