Wait for one tick in case no character is available after a call to
getchark().  Otherwise the system is constantly busy within an input
loop (for example in the RTEMS shell).  The polled Termios driver uses
the same approach.
---
 cpukit/libcsupport/src/consolesimpleread.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/cpukit/libcsupport/src/consolesimpleread.c 
b/cpukit/libcsupport/src/consolesimpleread.c
index a796e4380f..737b441d99 100644
--- a/cpukit/libcsupport/src/consolesimpleread.c
+++ b/cpukit/libcsupport/src/consolesimpleread.c
@@ -33,9 +33,14 @@ ssize_t _Console_simple_Read(
   for ( i = 0; i < n; ++i ) {
     int c;
 
-    do {
+    while ( true ) {
       c = getchark();
-    } while (c == -1);
+      if ( c != -1 ) {
+        break;
+      }
+
+      (void) rtems_task_wake_after( 1 );
+    }
 
     buf[ i ] = (char) c;
   }
-- 
2.16.4

_______________________________________________
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

Reply via email to