diff options
Diffstat (limited to 'sys/kern/tty.c')
| -rw-r--r-- | sys/kern/tty.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/sys/kern/tty.c b/sys/kern/tty.c index c075a4738ff5..590e8de26402 100644 --- a/sys/kern/tty.c +++ b/sys/kern/tty.c @@ -102,6 +102,7 @@ #include <sys/malloc.h> #include <sys/filedesc.h> #include <sys/sysctl.h> +#include <sys/ksiginfo.h> #include <vm/vm.h> #include <vm/pmap.h> @@ -1841,21 +1842,24 @@ int ttycheckoutq(struct tty *tp, int wait) { int hiwat, s; - sigset_t oldmask; + sigset_t oldmask, newmask; hiwat = tp->t_ohiwat; SIGEMPTYSET(oldmask); s = spltty(); if (wait) - oldmask = curproc->p_siglist; + ksiginfo_to_sigset_t(curproc, &oldmask); if (tp->t_outq.c_cc > hiwat + OBUFSIZ + 100) while (tp->t_outq.c_cc > hiwat) { ttstart(tp); if (tp->t_outq.c_cc <= hiwat) break; - if (!(wait && SIGSETEQ(curproc->p_siglist, oldmask))) { - splx(s); - return (0); + if (!wait) { + ksiginfo_to_sigset_t(curproc, &newmask); + if (SIGSETEQ(newmask, oldmask)) { + splx(s); + return (0); + } } SET(tp->t_state, TS_SO_OLOWAT); tsleep(TSA_OLOWAT(tp), PZERO - 1, "ttoutq", hz); |
