summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cpukit/libcsupport/src/termios.c14
-rw-r--r--testsuites/libtests/termios09/init.c3
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');