altosui: Allow 'connect to device' when already connected
authorKeith Packard <keithp@keithp.com>
Fri, 3 Sep 2010 08:30:33 +0000 (01:30 -0700)
committerKeith Packard <keithp@keithp.com>
Fri, 3 Sep 2010 14:04:28 +0000 (07:04 -0700)
Opening another serial device involves shutting down the display
thread (to reset its state) and spawning another one. Shutting down
the display thread normally closes the serial device as a part of the
process, and if this isn't done before the new serial device is
opened, then the new serial device ends up getting closed too.

Interrupting the display thread and waiting for it to stop before
opening the new serial device solves the problem.

Signed-off-by: Keith Packard <keithp@keithp.com>
ao-tools/altosui/AltosUI.java

index e3f6130..e63a004 100644 (file)
@@ -441,6 +441,7 @@ public class AltosUI extends JFrame {
 
                if (device != null) {
                        try {
+                               stop_display();
                                serial_line.open(device);
                                DeviceThread thread = new DeviceThread(serial_line);
                                serial_line.set_channel(AltosPreferences.channel());
@@ -536,8 +537,12 @@ public class AltosUI extends JFrame {
        Thread          display_thread;
 
        private void stop_display() {
-               if (display_thread != null && display_thread.isAlive())
+               if (display_thread != null && display_thread.isAlive()) {
                        display_thread.interrupt();
+                       try {
+                               display_thread.join();
+                       } catch (InterruptedException ie) {}
+               }
                display_thread = null;
        }