It's complicated to see which socket buffer associated to which socket
need protection. So inline the defines, ok?
Index: kern/uipc_usrreq.c
===================================================================
RCS file: /cvs/src/sys/kern/uipc_usrreq.c,v
retrieving revision 1.120
diff -u -p -r1.120 uipc_usrreq.c
--- kern/uipc_usrreq.c 2 Nov 2017 14:01:18 -0000 1.120
+++ kern/uipc_usrreq.c 11 Dec 2017 08:27:06 -0000
@@ -231,8 +231,6 @@ uipc_usrreq(struct socket *so, int req,
case SOCK_STREAM:
case SOCK_SEQPACKET:
-#define rcv (&so2->so_rcv)
-#define snd (&so->so_snd)
if (so->so_state & SS_CANTSENDMORE) {
error = EPIPE;
break;
@@ -248,22 +246,21 @@ uipc_usrreq(struct socket *so, int req,
* Wake up readers.
*/
if (control) {
- if (sbappendcontrol(so2, rcv, m, control))
+ if (sbappendcontrol(so2, &so2->so_rcv, m,
+ control)) {
control = NULL;
- else {
+ } else {
error = ENOBUFS;
break;
}
} else if (so->so_type == SOCK_SEQPACKET)
- sbappendrecord(so2, rcv, m);
+ sbappendrecord(so2, &so2->so_rcv, m);
else
- sbappend(so2, rcv, m);
- snd->sb_mbcnt = rcv->sb_mbcnt;
- snd->sb_cc = rcv->sb_cc;
+ sbappend(so2, &so2->so_rcv, m);
+ so->so_snd.sb_mbcnt = so2->so_rcv.sb_mbcnt;
+ so->so_snd.sb_cc = so2->so_rcv.sb_cc;
sorwakeup(so2);
m = NULL;
-#undef snd
-#undef rcv
break;
default: