diff options
author | rwatson <rwatson@FreeBSD.org> | 2004-06-24 04:29:53 +0000 |
---|---|---|
committer | rwatson <rwatson@FreeBSD.org> | 2004-06-24 04:29:53 +0000 |
commit | e9710722fa0d6e89eb71b1c1d060fddf1bd18b54 (patch) | |
tree | 6c64f1420561acdb875d0bce9463681ca04392e8 /sys/netipx | |
parent | 5b148b0cd40b22f7238cef6d2b77bde452dccc49 (diff) | |
download | FreeBSD-src-e9710722fa0d6e89eb71b1c1d060fddf1bd18b54.zip FreeBSD-src-e9710722fa0d6e89eb71b1c1d060fddf1bd18b54.tar.gz |
Acquire the receive socket buffer lock when modifying out-of-band
data fields of the socket in SPX.
Diffstat (limited to 'sys/netipx')
-rw-r--r-- | sys/netipx/spx_usrreq.c | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/sys/netipx/spx_usrreq.c b/sys/netipx/spx_usrreq.c index a321cc8..a0a713d 100644 --- a/sys/netipx/spx_usrreq.c +++ b/sys/netipx/spx_usrreq.c @@ -575,13 +575,12 @@ present: m = dtom(q); if (SI(q)->si_cc & SPX_OB) { cb->s_oobflags &= ~SF_IOOB; + SOCKBUF_LOCK(&so->so_rcv); if (so->so_rcv.sb_cc) so->so_oobmark = so->so_rcv.sb_cc; - else { - SOCKBUF_LOCK(&so->so_rcv); + else so->so_rcv.sb_state |= SBS_RCVATMARK; - SOCKBUF_UNLOCK(&so->so_rcv); - } + SOCKBUF_UNLOCK(&so->so_rcv); } q = q->si_prev; remque(q->si_next); @@ -610,8 +609,8 @@ present: if (sp->spx_cc & SPX_OB) { MCHTYPE(m, MT_OOBDATA); spx_newchecks[1]++; - so->so_oobmark = 0; SOCKBUF_LOCK(&so->so_rcv); + so->so_oobmark = 0; so->so_rcv.sb_state &= ~SBS_RCVATMARK; SOCKBUF_UNLOCK(&so->so_rcv); } |