diff options
author | rwatson <rwatson@FreeBSD.org> | 2005-09-25 19:52:09 +0000 |
---|---|---|
committer | rwatson <rwatson@FreeBSD.org> | 2005-09-25 19:52:09 +0000 |
commit | c9044f078d53ad37fc45327bb7bbcfbd35a0c8cf (patch) | |
tree | 3f79e0ce4d6946b9d850e0782ff922202342e994 | |
parent | 9b57d498dbcc565f233584e6c1cf8b14048d4cc0 (diff) | |
download | FreeBSD-src-c9044f078d53ad37fc45327bb7bbcfbd35a0c8cf.zip FreeBSD-src-c9044f078d53ad37fc45327bb7bbcfbd35a0c8cf.tar.gz |
Lock the read socket receive buffer when frobbing the sb_state flag on
that socket during open, not the write socket receive buffer. This
might explain clearing of the sb_state SB_LOCK flag seen occasionally
in soreceive() on fifos.
MFC after: 3 days
Spotted by: ups
-rw-r--r-- | sys/fs/fifofs/fifo_vnops.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/sys/fs/fifofs/fifo_vnops.c b/sys/fs/fifofs/fifo_vnops.c index f47b826..8c43e78 100644 --- a/sys/fs/fifofs/fifo_vnops.c +++ b/sys/fs/fifofs/fifo_vnops.c @@ -247,9 +247,9 @@ fail1: } fip->fi_writers++; if (fip->fi_writers == 1) { - SOCKBUF_LOCK(&fip->fi_writesock->so_rcv); + SOCKBUF_LOCK(&fip->fi_readsock->so_rcv); fip->fi_readsock->so_rcv.sb_state &= ~SBS_CANTRCVMORE; - SOCKBUF_UNLOCK(&fip->fi_writesock->so_rcv); + SOCKBUF_UNLOCK(&fip->fi_readsock->so_rcv); if (fip->fi_readers > 0) { wakeup(&fip->fi_readers); sorwakeup(fip->fi_readsock); |