From b7c6a6a8671a192b737c2c652604ddbe454b9f6e Mon Sep 17 00:00:00 2001 From: "Michael I. Bushnell" Date: Tue, 12 Dec 1995 19:47:23 +0000 Subject: (open_hook): Do it differently. --- term/users.c | 51 ++++++++++++++++++++++++++------------------------- 1 file changed, 26 insertions(+), 25 deletions(-) (limited to 'term') diff --git a/term/users.c b/term/users.c index 0d7cb9ad..d4cbf6a3 100644 --- a/term/users.c +++ b/term/users.c @@ -90,6 +90,9 @@ open_hook (struct trivfs_control *cntl, int cancel = 0; error_t err; + if ((flags & (O_READ|O_WRITE)) == 0) + return 0; + mutex_lock (&global_lock); if (!(termflags & TTY_OPEN)) @@ -115,36 +118,34 @@ open_hook (struct trivfs_control *cntl, } /* Wait for carrier to turn on. */ - if (flags & (O_READ|O_WRITE)) + while (((termflags & NO_CARRIER) && !(termstate.c_cflag & CLOCAL)) + && !(flags & O_NONBLOCK) + && !cancel) { - while (((termflags & NO_CARRIER) && !(termstate.c_cflag & CLOCAL)) - && !(flags & O_NONBLOCK) - && !cancel) - { - err = (*bottom->assert_dtr) (); - if (err) - { - mutex_unlock (&global_lock); - return err; - } - cancel = hurd_condition_wait (&carrier_alert, &global_lock); - } - - if ((termflags & NO_CARRIER) && !(termstate.c_cflag & CLOCAL)) + err = (*bottom->assert_dtr) (); + if (err) { mutex_unlock (&global_lock); - return EWOULDBLOCK; + return err; } - if (cancel) - { - mutex_unlock (&global_lock); - return EINTR; - } - - termflags |= TTY_OPEN; - if (!(termstate.c_cflag & CIGNORE)) - (*bottom->set_bits) (); + cancel = hurd_condition_wait (&carrier_alert, &global_lock); + } + + if ((termflags & NO_CARRIER) && !(termstate.c_cflag & CLOCAL)) + { + mutex_unlock (&global_lock); + return EWOULDBLOCK; } + if (cancel) + { + mutex_unlock (&global_lock); + return EINTR; + } + + termflags |= TTY_OPEN; + if (!(termstate.c_cflag & CIGNORE)) + (*bottom->set_bits) (); + mutex_unlock (&global_lock); return 0; -- cgit v1.2.3