From 1085ec5d57e0ed5d132f2bbdac1a0b6a32c0ab4a Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Tue, 5 Jul 2016 18:03:49 +0200 Subject: Switch from GPLv2 to GPLv2+ Signed-off-by: Keith Packard --- altosui/AltosConfigTD.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'altosui/AltosConfigTD.java') diff --git a/altosui/AltosConfigTD.java b/altosui/AltosConfigTD.java index 61727498..13eced99 100644 --- a/altosui/AltosConfigTD.java +++ b/altosui/AltosConfigTD.java @@ -3,7 +3,8 @@ * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of -- cgit v1.2.3 From 8bbef0c7039f4a0c6ac368fd994c2e52d84d293c Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Fri, 2 Sep 2016 16:13:25 -0500 Subject: altosui: Deal with connect failure in AltosConfigTD When the USB connection times out, abort any pending operations and clean up the thread correctly. Also, deal with the serial line being closed by checking for null. Signed-off-by: Keith Packard --- altosui/AltosConfigTD.java | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) (limited to 'altosui/AltosConfigTD.java') diff --git a/altosui/AltosConfigTD.java b/altosui/AltosConfigTD.java index 13eced99..621db3c0 100644 --- a/altosui/AltosConfigTD.java +++ b/altosui/AltosConfigTD.java @@ -198,6 +198,9 @@ public class AltosConfigTD implements ActionListener { final static int serial_mode_save = 1; final static int serial_mode_reboot = 2; + SerialData serial_data; + Thread serial_thread; + class SerialData implements Runnable { AltosConfigTD config; int serial_mode; @@ -207,9 +210,9 @@ public class AltosConfigTD implements ActionListener { boolean been_there = false; config.reset_data(); - for (;;) { + while (config.serial_line != null) { config.serial_line.printf("c s\nf\nv\n"); - for (;;) { + while (config.serial_line != null) { try { String line = config.serial_line.get_reply(5000); config.process_line(line); @@ -256,6 +259,7 @@ public class AltosConfigTD implements ActionListener { /* fall through ... */ case serial_mode_read: get_data(); + serial_thread = null; break; } } @@ -267,11 +271,17 @@ public class AltosConfigTD implements ActionListener { } void run_serial_thread(int serial_mode) { - SerialData sd = new SerialData(this, serial_mode); - Thread st = new Thread(sd); - st.start(); + serial_data = new SerialData(this, serial_mode); + serial_thread = new Thread(serial_data); + serial_thread.start(); } + void abort_serial_thread() { + if (serial_thread != null) { + serial_thread.interrupt(); + serial_thread = null; + } + } void init_ui () throws InterruptedException, TimeoutException { config_ui = new AltosConfigTDUI(owner); config_ui.addActionListener(this); @@ -280,6 +290,7 @@ public class AltosConfigTD implements ActionListener { } void abort() { + abort_serial_thread(); if (serial_line != null) { serial_line.close(); serial_line = null; -- cgit v1.2.3