altosui: Make AltosSerial.flush_input keep reading while non-empty
authorKeith Packard <keithp@keithp.com>
Wed, 24 Nov 2010 03:04:55 +0000 (19:04 -0800)
committerKeith Packard <keithp@keithp.com>
Wed, 24 Nov 2010 03:10:27 +0000 (19:10 -0800)
Flushing the input buffer can take a while, especially over the packet
link. Keep reading while stuff is appearing on the reply queue.

Signed-off-by: Keith Packard <keithp@keithp.com>
ao-tools/altosui/AltosSerial.java

index ab74486b49904e018beae5ca66df2dd2a02cce8a..8a6ad05e823cfac824121a8afc08ca6e804f18c2 100644 (file)
@@ -114,16 +114,20 @@ public class AltosSerial implements Runnable {
 
        public void flush_input() {
                flush_output();
-               try {
-                       Thread.sleep(200);
-               } catch (InterruptedException ie) {
-               }
-               synchronized(this) {
-                       if (!"VERSION".startsWith(line) &&
-                           !line.startsWith("VERSION"))
-                               line = "";
-                       reply_queue.clear();
-               }
+               boolean got_some;
+               do {
+                       try {
+                               Thread.sleep(100);
+                       } catch (InterruptedException ie) {
+                       }
+                       got_some = !reply_queue.isEmpty();
+                       synchronized(this) {
+                               if (!"VERSION".startsWith(line) &&
+                                   !line.startsWith("VERSION"))
+                                       line = "";
+                               reply_queue.clear();
+                       }
+               } while (got_some);
        }
 
        public String get_reply() throws InterruptedException {