diff options
-rw-r--r-- | cpukit/libcsupport/src/termios.c | 14 | ||||
-rw-r--r-- | testsuites/libtests/termios09/init.c | 3 |
2 files changed, 12 insertions, 5 deletions
diff --git a/cpukit/libcsupport/src/termios.c b/cpukit/libcsupport/src/termios.c index 62964e4747..f5bf493966 100644 --- a/cpukit/libcsupport/src/termios.c +++ b/cpukit/libcsupport/src/termios.c @@ -1504,13 +1504,17 @@ fillBufferQueue (struct rtems_termios_tty *tty) /* * Wait for characters */ - if ( wait ) { - rtems_status_code sc; + if (wait) { + if (tty->ccount < CBUFSIZE - 1) { + rtems_status_code sc; - sc = rtems_semaphore_obtain( - tty->rawInBuf.Semaphore, tty->rawInBufSemaphoreOptions, timeout); - if (sc != RTEMS_SUCCESSFUL) + sc = rtems_semaphore_obtain( + tty->rawInBuf.Semaphore, tty->rawInBufSemaphoreOptions, timeout); + if (sc != RTEMS_SUCCESSFUL) + break; + } else { break; + } } } } diff --git a/testsuites/libtests/termios09/init.c b/testsuites/libtests/termios09/init.c index a32ebdaec5..980a6ea9ec 100644 --- a/testsuites/libtests/termios09/init.c +++ b/testsuites/libtests/termios09/init.c @@ -550,6 +550,9 @@ static void test_rx_callback_icanon(test_context *ctx) input(ctx, i, 'e'); rtems_test_assert(dev->callback_counter == 5); + n = read(ctx->fds[i], buf, 255); + rtems_test_assert(n == 255); + dev->tty->tty_rcv.sw_pfn = NULL; dev->tty->tty_rcv.sw_arg = NULL; set_veol_veol2(ctx, i, '\0', '\0'); |