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.c18 Dec 2017 10:07:55 - 1.211
> +++ kern/uipc_socket.c18 Dec 2017 13:41:06 -
> @@ -668,8 +668,8 @@ bad:
> if (mp)
> *mp = NULL;
>
> -restart:
> s = solock(so);
> +restart:
> if ((error = sblock(so, >so_rcv, SBLOCKWAIT(flags))) != 0) {
> sounlock(s);
> return (error);
> @@ -738,9 +738,10 @@ restart:
> SBLASTMBUFCHK(>so_rcv, "soreceive sbwait 1");
> sbunlock(so, >so_rcv);
> error = sbwait(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_rcv);
> - sounlock(s);
> goto restart;
> }
>