summaryrefslogtreecommitdiffstats
path: root/sys/netipx
diff options
context:
space:
mode:
authorrwatson <rwatson@FreeBSD.org>2004-06-24 04:29:53 +0000
committerrwatson <rwatson@FreeBSD.org>2004-06-24 04:29:53 +0000
commite9710722fa0d6e89eb71b1c1d060fddf1bd18b54 (patch)
tree6c64f1420561acdb875d0bce9463681ca04392e8 /sys/netipx
parent5b148b0cd40b22f7238cef6d2b77bde452dccc49 (diff)
downloadFreeBSD-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.c9
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);
}
OpenPOWER on IntegriCloud