diff options
| author | Keith Packard <keithp@keithp.com> | 2013-12-18 01:14:11 -0800 | 
|---|---|---|
| committer | Keith Packard <keithp@keithp.com> | 2013-12-18 01:14:11 -0800 | 
| commit | e26306c9350ef1d107d4257ef1c09d15165c9154 (patch) | |
| tree | d7983c6a04c54b3307d6fc2699dad4fa21d8bde0 /altoslib/AltosLink.java | |
| parent | 18852efa108ba6e6e69dfd5076d4f4c01f62b4ef (diff) | |
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 <keithp@keithp.com>
Diffstat (limited to 'altoslib/AltosLink.java')
| -rw-r--r-- | altoslib/AltosLink.java | 47 | 
1 files changed, 22 insertions, 25 deletions
| 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) {  			}  		} | 
