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;
>       }
>  

Reply via email to