altos: AltosSerial.flush_input shouldn't discard Interrupted exceptions
authorKeith Packard <keithp@keithp.com>
Sun, 14 Aug 2011 04:10:15 +0000 (21:10 -0700)
committerKeith Packard <keithp@keithp.com>
Sun, 14 Aug 2011 04:10:15 +0000 (21:10 -0700)
The eeprom download code wants to interrupt serial communication so
that it can stop downloading stuff in the middle of a run. Make
flush_input pass the exception along instead of discarding it.

Signed-off-by: Keith Packard <keithp@keithp.com>
altosui/AltosDebug.java
altosui/AltosEepromDelete.java
altosui/AltosEepromDownload.java
altosui/AltosEepromManage.java
altosui/AltosSerial.java

index 8d435b6..d18de80 100644 (file)
@@ -62,7 +62,10 @@ public class AltosDebug extends AltosSerial {
        void ensure_debug_mode() {
                if (!debug_mode) {
                        printf("D\n");
-                       flush_input();
+                       try {
+                               flush_input();
+                       } catch (InterruptedException ie) {
+                       }
                        debug_mode = true;
                }
        }
index cd9abfa..a9d7778 100644 (file)
@@ -104,10 +104,14 @@ public class AltosEepromDelete implements Runnable {
                                                  serial_line.device.toShortString()),
                                    "Connection Failed");
                } finally {
-                       if (remote)
-                               serial_line.stop_remote();
-                       serial_line.flush_output();
-                       serial_line.close();
+                       try {
+                               if (remote)
+                                       serial_line.stop_remote();
+                       } catch (InterruptedException ie) {
+                       } finally {
+                               serial_line.flush_output();
+                               serial_line.close();
+                       }
                }
                if (listener != null) {
                        Runnable r = new Runnable() {
index b44a145..358ad33 100644 (file)
@@ -373,8 +373,12 @@ public class AltosEepromDownload implements Runnable {
                                     "Connection Failed",
                                     JOptionPane.ERROR_MESSAGE);
                } finally {
-                       if (remote)
-                               serial_line.stop_remote();
+                       if (remote) {
+                               try {
+                                       serial_line.stop_remote();
+                               } catch (InterruptedException ie) {
+                               }
+                       }
                        serial_line.flush_output();
                }
                monitor.done();
index 0652ca0..2e52062 100644 (file)
@@ -44,7 +44,10 @@ public class AltosEepromManage implements ActionListener {
 
        public void finish() {
                if (serial_line != null) {
-                       serial_line.flush_input();
+                       try {
+                               serial_line.flush_input();
+                       } catch (InterruptedException ie) {
+                       }
                        serial_line.close();
                        serial_line = null;
                }
index b089c9c..f0e25fa 100644 (file)
@@ -187,7 +187,7 @@ public class AltosSerial implements Runnable {
                return abort;
        }
 
-       public void flush_input() {
+       public void flush_input() throws InterruptedException {
                flush_output();
                boolean got_some;
 
@@ -195,10 +195,7 @@ public class AltosSerial implements Runnable {
                if (remote)
                        timeout = 500;
                do {
-                       try {
-                               Thread.sleep(timeout);
-                       } catch (InterruptedException ie) {
-                       }
+                       Thread.sleep(timeout);
                        got_some = !reply_queue.isEmpty();
                        synchronized(this) {
                                if (!"VERSION".startsWith(line) &&
@@ -271,8 +268,12 @@ public class AltosSerial implements Runnable {
        }
 
        public void close() {
-               if (remote)
-                       stop_remote();
+               if (remote) {
+                       try {
+                               stop_remote();
+                       } catch (InterruptedException ie) {
+                       }
+               }
                if (in_reply != 0)
                        System.out.printf("Uh-oh. Closing active serial device\n");
 
@@ -422,7 +423,7 @@ public class AltosSerial implements Runnable {
                remote = true;
        }
 
-       public void stop_remote() {
+       public void stop_remote() throws InterruptedException {
                if (debug)
                        System.out.printf("stop remote\n");
                try {