From e26306c9350ef1d107d4257ef1c09d15165c9154 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Wed, 18 Dec 2013 01:14:11 -0800 Subject: altoslib: Pass InterruptedException up the stack instead of hiding it When interrupting a thread that is talking to a serial device, it's important not to have that thread discard the InterruptedException so that it will actually terminate. This patch removes a bunch of places that were discarding InterruptedExceptions and lets higher level code see them so that they can exit cleanly. Signed-off-by: Keith Packard --- altoslib/AltosLink.java | 47 ++++++++++++++++++++++------------------------- 1 file changed, 22 insertions(+), 25 deletions(-) (limited to 'altoslib/AltosLink.java') diff --git a/altoslib/AltosLink.java b/altoslib/AltosLink.java index ba557a72..ee1f9785 100644 --- a/altoslib/AltosLink.java +++ b/altoslib/AltosLink.java @@ -26,10 +26,10 @@ public abstract class AltosLink implements Runnable { public final static int ERROR = -1; public final static int TIMEOUT = -2; - public abstract int getchar(); - public abstract void print(String data); + public abstract int getchar() throws InterruptedException; + public abstract void print(String data) throws InterruptedException; public abstract void putchar(byte c); - public abstract void close(); + public abstract void close() throws InterruptedException; public static boolean debug = false; public static void set_debug(boolean in_debug) { debug = in_debug; } @@ -57,7 +57,11 @@ public abstract class AltosLink implements Runnable { String line = String.format(format, arguments); if (debug) pending_output.add(line); - print(line); + try { + print(line); + } catch (InterruptedException ie) { + + } } public String get_reply_no_dialog(int timeout) throws InterruptedException, TimeoutException { @@ -233,7 +237,7 @@ public abstract class AltosLink implements Runnable { try { add_telem (new AltosLine()); add_reply (new AltosLine()); - } catch (InterruptedException e) { + } catch (InterruptedException ie) { } } @@ -399,33 +403,27 @@ public abstract class AltosLink implements Runnable { flush_output(); } - public boolean is_loader() { + public boolean is_loader() throws InterruptedException { boolean ret = false; printf("v\n"); - try { - for (;;) { - String line = get_reply(); - - if (line == null) - return false; - if (line.startsWith("software-version")) - break; - if (line.startsWith("altos-loader")) - ret = true; - } - } catch (InterruptedException ie) { + for (;;) { + String line = get_reply(); + + if (line == null) + return false; + if (line.startsWith("software-version")) + break; + if (line.startsWith("altos-loader")) + ret = true; } return ret; } - public void to_loader() { + public void to_loader() throws InterruptedException { printf("X\n"); flush_output(); close(); - try { - Thread.sleep(1000); - } catch (InterruptedException ie) { - } + Thread.sleep(1000); } public boolean remote; @@ -490,7 +488,7 @@ public abstract class AltosLink implements Runnable { return config_data.has_monitor_battery(); } - public double monitor_battery() { + public double monitor_battery() throws InterruptedException { int monitor_batt = AltosLib.MISSING; if (config_data.has_monitor_battery()) { @@ -504,7 +502,6 @@ public abstract class AltosLink implements Runnable { } i++; } - } catch (InterruptedException ie) { } catch (TimeoutException te) { } } -- cgit v1.2.3