diff options
Diffstat (limited to 'sys/arch')
-rw-r--r-- | sys/arch/i386/isa/pccom.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/sys/arch/i386/isa/pccom.c b/sys/arch/i386/isa/pccom.c index 07c14f2e873..b09e7790196 100644 --- a/sys/arch/i386/isa/pccom.c +++ b/sys/arch/i386/isa/pccom.c @@ -1,4 +1,4 @@ -/* $OpenBSD: pccom.c,v 1.11 1997/07/07 17:08:04 niklas Exp $ */ +/* $OpenBSD: pccom.c,v 1.12 1997/09/03 20:55:29 deraadt Exp $ */ /* $NetBSD: com.c,v 1.82.4.1 1996/06/02 09:08:00 mrg Exp $ */ /*- @@ -838,12 +838,14 @@ comopen(dev, flag, mode, p) return EBUSY; } } else { - while (!(DEVCUA(dev) && sc->sc_cua) && - !ISSET(tp->t_cflag, CLOCAL) && - !ISSET(tp->t_state, TS_CARR_ON)) { + while (sc->sc_cua || + (!ISSET(tp->t_cflag, CLOCAL) && + !ISSET(tp->t_state, TS_CARR_ON))) { SET(tp->t_state, TS_WOPEN); error = ttysleep(tp, &tp->t_rawq, TTIPRI | PCATCH, ttopen, 0); + if (!DEVCUA(dev) && sc->sc_cua && error == EINTR) + continue; if (error) { /* XXX should turn off chip if we're the only waiter */ @@ -853,6 +855,8 @@ comopen(dev, flag, mode, p) splx(s); return error; } + if (!DEVCUA(dev) && sc->sc_cua) + continue; } } splx(s); |