diff options
Diffstat (limited to 'sys/kern/sys_generic.c')
-rw-r--r-- | sys/kern/sys_generic.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/sys/kern/sys_generic.c b/sys/kern/sys_generic.c index b5a9c41..a779711 100644 --- a/sys/kern/sys_generic.c +++ b/sys/kern/sys_generic.c @@ -411,8 +411,11 @@ dofilewrite(p, fp, fd, buf, nbyte, offset, flags) if (auio.uio_resid != cnt && (error == ERESTART || error == EINTR || error == EWOULDBLOCK)) error = 0; - if (error == EPIPE) + if (error == EPIPE) { + PROC_LOCK(p); psignal(p, SIGPIPE); + PROC_UNLOCK(p); + } } cnt -= auio.uio_resid; #ifdef KTRACE @@ -504,8 +507,11 @@ writev(p, uap) if (auio.uio_resid != cnt && (error == ERESTART || error == EINTR || error == EWOULDBLOCK)) error = 0; - if (error == EPIPE) + if (error == EPIPE) { + PROC_LOCK(p); psignal(p, SIGPIPE); + PROC_UNLOCK(p); + } } cnt -= auio.uio_resid; #ifdef KTRACE |