diff options
Diffstat (limited to 'sys/kern/sys_pipe.c')
-rw-r--r-- | sys/kern/sys_pipe.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/sys/kern/sys_pipe.c b/sys/kern/sys_pipe.c index 59d519845ca..d266a201d3d 100644 --- a/sys/kern/sys_pipe.c +++ b/sys/kern/sys_pipe.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sys_pipe.c,v 1.114 2020/02/01 15:06:21 anton Exp $ */ +/* $OpenBSD: sys_pipe.c,v 1.115 2020/02/01 15:52:34 anton Exp $ */ /* * Copyright (c) 1996 John S. Dyson @@ -372,17 +372,20 @@ pipeselwakeup(struct pipe *cpipe) { rw_assert_wrlock(cpipe->pipe_lock); - /* Kernel lock needed in order to prevent race with kevent. */ KERNEL_LOCK(); + + /* Kernel lock needed in order to prevent race with kevent. */ if (cpipe->pipe_state & PIPE_SEL) { cpipe->pipe_state &= ~PIPE_SEL; selwakeup(&cpipe->pipe_sel); } else KNOTE(&cpipe->pipe_sel.si_note, NOTE_SUBMIT); - KERNEL_UNLOCK(); + /* Kernel lock needed since pgsigio() calls ptsignal(). */ if (cpipe->pipe_state & PIPE_ASYNC) pgsigio(&cpipe->pipe_sigio, SIGIO, 0); + + KERNEL_UNLOCK(); } int |