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 e3f613037dc61eab425d2a1becf9a0d735be0ce7..e63a004c67c5f5ef2e747da9373c2259f3ae50b5 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;
        }