pipe_direct_write: Fix mismatched pipelock/unlock
If a signal is caught in pipelock, causing it to fail, pipe_direct_write should not try to pipeunlock. Reported by: pho Differential Revision: https://reviews.freebsd.org/D3069 Reviewed by: kib Approved by: markj (mentor) MFC after: 1 week Sponsored by: EMC / Isilon Storage Division
This commit is contained in:
parent
4067f24f01
commit
08bb34a547
@ -946,9 +946,10 @@ pipe_direct_write(wpipe, uio)
|
||||
retry:
|
||||
PIPE_LOCK_ASSERT(wpipe, MA_OWNED);
|
||||
error = pipelock(wpipe, 1);
|
||||
if (wpipe->pipe_state & PIPE_EOF)
|
||||
if (error != 0)
|
||||
goto error1;
|
||||
if ((wpipe->pipe_state & PIPE_EOF) != 0) {
|
||||
error = EPIPE;
|
||||
if (error) {
|
||||
pipeunlock(wpipe);
|
||||
goto error1;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user