svn commit: r360896 - in stable/12/sys: fs/fifofs kern
Mark Johnston
markj at FreeBSD.org
Mon May 11 15:20:06 UTC 2020
Author: markj
Date: Mon May 11 15:20:05 2020
New Revision: 360896
URL: https://svnweb.freebsd.org/changeset/base/360896
Log:
MFC r360379:
Call pipeselwakeup() after toggling PIPE_EOF.
Modified:
stable/12/sys/fs/fifofs/fifo_vnops.c
stable/12/sys/kern/sys_pipe.c
Directory Properties:
stable/12/ (props changed)
Modified: stable/12/sys/fs/fifofs/fifo_vnops.c
==============================================================================
--- stable/12/sys/fs/fifofs/fifo_vnops.c Mon May 11 15:17:57 2020 (r360895)
+++ stable/12/sys/fs/fifofs/fifo_vnops.c Mon May 11 15:20:05 2020 (r360896)
@@ -173,8 +173,10 @@ fifo_open(ap)
fip->fi_rgen++;
if (fip->fi_readers == 1) {
fpipe->pipe_state &= ~PIPE_EOF;
- if (fip->fi_writers > 0)
+ if (fip->fi_writers > 0) {
wakeup(&fip->fi_writers);
+ pipeselwakeup(fpipe);
+ }
}
fp->f_pipegen = fpipe->pipe_wgen - fip->fi_writers;
}
@@ -189,8 +191,10 @@ fifo_open(ap)
fip->fi_wgen++;
if (fip->fi_writers == 1) {
fpipe->pipe_state &= ~PIPE_EOF;
- if (fip->fi_readers > 0)
+ if (fip->fi_readers > 0) {
wakeup(&fip->fi_readers);
+ pipeselwakeup(fpipe);
+ }
}
}
if ((ap->a_mode & O_NONBLOCK) == 0) {
@@ -209,6 +213,7 @@ fifo_open(ap)
fpipe->pipe_state |= PIPE_EOF;
if (fpipe->pipe_state & PIPE_WANTW)
wakeup(fpipe);
+ pipeselwakeup(fpipe);
PIPE_UNLOCK(fpipe);
fifo_cleanup(vp);
}
@@ -237,6 +242,7 @@ fifo_open(ap)
if (fpipe->pipe_state & PIPE_WANTR)
wakeup(fpipe);
fpipe->pipe_wgen++;
+ pipeselwakeup(fpipe);
PIPE_UNLOCK(fpipe);
fifo_cleanup(vp);
}
Modified: stable/12/sys/kern/sys_pipe.c
==============================================================================
--- stable/12/sys/kern/sys_pipe.c Mon May 11 15:17:57 2020 (r360895)
+++ stable/12/sys/kern/sys_pipe.c Mon May 11 15:20:05 2020 (r360896)
@@ -1608,8 +1608,6 @@ pipeclose(struct pipe *cpipe)
pipelock(cpipe, 0);
pp = cpipe->pipe_pair;
- pipeselwakeup(cpipe);
-
/*
* If the other side is blocked, wake it up saying that
* we want to close it down.
@@ -1623,17 +1621,16 @@ pipeclose(struct pipe *cpipe)
pipelock(cpipe, 0);
}
+ pipeselwakeup(cpipe);
/*
* Disconnect from peer, if any.
*/
ppipe = cpipe->pipe_peer;
if (ppipe->pipe_present == PIPE_ACTIVE) {
- pipeselwakeup(ppipe);
-
ppipe->pipe_state |= PIPE_EOF;
wakeup(ppipe);
- KNOTE_LOCKED(&ppipe->pipe_sel.si_note, 0);
+ pipeselwakeup(ppipe);
}
/*
More information about the svn-src-stable
mailing list