Re: so_state & solock

2017-07-03 Thread Alexander Bluhm
On Mon, Jul 03, 2017 at 02:42:15PM +0200, Martin Pieuchot wrote:
> I'd like to assert that the socket lock is held when modifying
> `so_sate'.
> 
> ok?

OK bluhm@

> 
> Index: kern/uipc_socket2.c
> ===
> RCS file: /cvs/src/sys/kern/uipc_socket2.c,v
> retrieving revision 1.80
> diff -u -p -r1.80 uipc_socket2.c
> --- kern/uipc_socket2.c   27 Jun 2017 12:02:43 -  1.80
> +++ kern/uipc_socket2.c   3 Jul 2017 12:35:46 -
> @@ -89,7 +89,7 @@ int sbsleep(struct sockbuf *, struct rwl
>  void
>  soisconnecting(struct socket *so)
>  {
> -
> + soassertlocked(so);
>   so->so_state &= ~(SS_ISCONNECTED|SS_ISDISCONNECTING);
>   so->so_state |= SS_ISCONNECTING;
>  }
> @@ -99,6 +99,7 @@ soisconnected(struct socket *so)
>  {
>   struct socket *head = so->so_head;
>  
> + soassertlocked(so);
>   so->so_state &= ~(SS_ISCONNECTING|SS_ISDISCONNECTING);
>   so->so_state |= SS_ISCONNECTED;
>   if (head && soqremque(so, 0)) {
> @@ -115,7 +116,7 @@ soisconnected(struct socket *so)
>  void
>  soisdisconnecting(struct socket *so)
>  {
> -
> + soassertlocked(so);
>   so->so_state &= ~SS_ISCONNECTING;
>   so->so_state |= (SS_ISDISCONNECTING|SS_CANTRCVMORE|SS_CANTSENDMORE);
>   wakeup(>so_timeo);
> @@ -126,7 +127,7 @@ soisdisconnecting(struct socket *so)
>  void
>  soisdisconnected(struct socket *so)
>  {
> -
> + soassertlocked(so);
>   so->so_state &= ~(SS_ISCONNECTING|SS_ISCONNECTED|SS_ISDISCONNECTING);
>   so->so_state |= (SS_CANTRCVMORE|SS_CANTSENDMORE|SS_ISDISCONNECTED);
>   wakeup(>so_timeo);
> @@ -259,7 +260,7 @@ soqremque(struct socket *so, int q)
>  void
>  socantsendmore(struct socket *so)
>  {
> -
> + soassertlocked(so);
>   so->so_state |= SS_CANTSENDMORE;
>   sowwakeup(so);
>  }
> @@ -267,7 +268,7 @@ socantsendmore(struct socket *so)
>  void
>  socantrcvmore(struct socket *so)
>  {
> -
> + soassertlocked(so);
>   so->so_state |= SS_CANTRCVMORE;
>   sorwakeup(so);
>  }



so_state & solock

2017-07-03 Thread Martin Pieuchot
I'd like to assert that the socket lock is held when modifying
`so_sate'.

ok?

Index: kern/uipc_socket2.c
===
RCS file: /cvs/src/sys/kern/uipc_socket2.c,v
retrieving revision 1.80
diff -u -p -r1.80 uipc_socket2.c
--- kern/uipc_socket2.c 27 Jun 2017 12:02:43 -  1.80
+++ kern/uipc_socket2.c 3 Jul 2017 12:35:46 -
@@ -89,7 +89,7 @@ int sbsleep(struct sockbuf *, struct rwl
 void
 soisconnecting(struct socket *so)
 {
-
+   soassertlocked(so);
so->so_state &= ~(SS_ISCONNECTED|SS_ISDISCONNECTING);
so->so_state |= SS_ISCONNECTING;
 }
@@ -99,6 +99,7 @@ soisconnected(struct socket *so)
 {
struct socket *head = so->so_head;
 
+   soassertlocked(so);
so->so_state &= ~(SS_ISCONNECTING|SS_ISDISCONNECTING);
so->so_state |= SS_ISCONNECTED;
if (head && soqremque(so, 0)) {
@@ -115,7 +116,7 @@ soisconnected(struct socket *so)
 void
 soisdisconnecting(struct socket *so)
 {
-
+   soassertlocked(so);
so->so_state &= ~SS_ISCONNECTING;
so->so_state |= (SS_ISDISCONNECTING|SS_CANTRCVMORE|SS_CANTSENDMORE);
wakeup(>so_timeo);
@@ -126,7 +127,7 @@ soisdisconnecting(struct socket *so)
 void
 soisdisconnected(struct socket *so)
 {
-
+   soassertlocked(so);
so->so_state &= ~(SS_ISCONNECTING|SS_ISCONNECTED|SS_ISDISCONNECTING);
so->so_state |= (SS_CANTRCVMORE|SS_CANTSENDMORE|SS_ISDISCONNECTED);
wakeup(>so_timeo);
@@ -259,7 +260,7 @@ soqremque(struct socket *so, int q)
 void
 socantsendmore(struct socket *so)
 {
-
+   soassertlocked(so);
so->so_state |= SS_CANTSENDMORE;
sowwakeup(so);
 }
@@ -267,7 +268,7 @@ socantsendmore(struct socket *so)
 void
 socantrcvmore(struct socket *so)
 {
-
+   soassertlocked(so);
so->so_state |= SS_CANTRCVMORE;
sorwakeup(so);
 }