diff options
-rw-r--r-- | term/ChangeLog | 4 | ||||
-rw-r--r-- | term/hurdio.c | 29 |
2 files changed, 17 insertions, 16 deletions
diff --git a/term/ChangeLog b/term/ChangeLog index a5c8aef3..3ed79a77 100644 --- a/term/ChangeLog +++ b/term/ChangeLog @@ -1,5 +1,9 @@ 2002-09-10 Marcus Brinkmann <marcus@gnu.org> + * hurdio.c (hurdio_writer_loop): Check output_stopped instead termflags. + Move the code that signals the underlying file to ... + (hurdio_start_output): ... here. + * munge.c (input_character): Really toggle USER_OUTPUT_SUSP if VSTART == VSTOP. diff --git a/term/hurdio.c b/term/hurdio.c index 2dfbacef..ef34740b 100644 --- a/term/hurdio.c +++ b/term/hurdio.c @@ -243,26 +243,11 @@ hurdio_writer_loop (any_t arg) { while (writer_thread != MACH_PORT_NULL && (ioport == MACH_PORT_NULL || !qsize (outputq) - || (termflags & USER_OUTPUT_SUSP))) + || output_stopped)) hurd_condition_wait (&hurdio_writer_condition, &global_lock); if (writer_thread == MACH_PORT_NULL) /* A sign to die. */ return 0; - /* If the output was suspended earlier, we have to tell the - underlying port to resume it. */ - if (output_stopped) - { - if (tioc_caps & TIOC_CAP_START) - { - err = tioctl_tiocstart (ioport); - if (err && (err == EMIG_BAD_ID || err == EOPNOTSUPP)) - tioc_caps &= ~TIOC_CAP_START; - /* XXX Handle the error. */ - err = 0; - } - output_stopped = 0; - } - /* Copy characters onto PENDING_OUTPUT, not bothering those already there. */ size = qsize (outputq); @@ -323,6 +308,18 @@ hurdio_writer_loop (any_t arg) static error_t hurdio_start_output () { + /* If the output was suspended earlier and not anymore, we have to + tell the underlying port to resume it. */ + if (output_stopped && !(termflags & USER_OUTPUT_SUSP)) + { + if (tioc_caps & TIOC_CAP_START) + { + error_t err = tioctl_tiocstart (ioport); + if (err && (err == EMIG_BAD_ID || err == EOPNOTSUPP)) + tioc_caps &= ~TIOC_CAP_START; + } + output_stopped = 0; + } condition_broadcast (&hurdio_writer_condition); return 0; } |