Re: soreceive() unlock/relock

2017-12-18 Thread Alexander Bluhm
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;
>   }
>  



soreceive() unlock/relock

2017-12-18 Thread Martin Pieuchot
Diff below remove an unnecessary unlock/relock dance when following the
'goto restart'.

ok?

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 -  1.211
+++ kern/uipc_socket.c  18 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;
}