From 8bbef0c7039f4a0c6ac368fd994c2e52d84d293c Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Fri, 2 Sep 2016 16:13:25 -0500 Subject: [PATCH] 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(-) 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; -- 2.30.2