From 407696f11ac1736e840c9b702592c46197d14c2c Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Sat, 7 Dec 2013 09:53:10 -0800 Subject: [PATCH] altosui: Clean up serial close handling Unify serial close processing in a single function (close_serial), make everyone else call that. This avoids a couple of cases where the device would be closed and not removed from the devices_opened list, leading to 'device is already in use' messages. Signed-off-by: Keith Packard --- altosui/AltosSerial.java | 34 ++++++++++++++++------------------ 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/altosui/AltosSerial.java b/altosui/AltosSerial.java index 697ad539..491b6e81 100644 --- a/altosui/AltosSerial.java +++ b/altosui/AltosSerial.java @@ -57,11 +57,8 @@ public class AltosSerial extends AltosLink { public void flush_output() { super.flush_output(); if (altos != null) { - if (libaltos.altos_flush(altos) != 0) { - libaltos.altos_close(altos); - altos = null; - abort_reply(); - } + if (libaltos.altos_flush(altos) != 0) + close_serial(); } } @@ -122,6 +119,17 @@ public class AltosSerial extends AltosLink { SwingUtilities.invokeLater(r); } + private void close_serial() { + synchronized (devices_opened) { + devices_opened.remove(device.getPath()); + } + if (altos != null) { + libaltos.altos_free(altos); + altos = null; + } + abort_reply(); + } + public void close() { if (remote) { try { @@ -132,9 +140,8 @@ public class AltosSerial extends AltosLink { if (in_reply != 0) System.out.printf("Uh-oh. Closing active serial device\n"); - if (altos != null) { - libaltos.altos_close(altos); - } + close_serial(); + if (input_thread != null) { try { input_thread.interrupt(); @@ -143,13 +150,6 @@ public class AltosSerial extends AltosLink { } input_thread = null; } - if (altos != null) { - libaltos.altos_free(altos); - altos = null; - } - synchronized (devices_opened) { - devices_opened.remove(device.getPath()); - } if (debug) System.out.printf("Closing %s\n", device.getPath()); } @@ -157,9 +157,7 @@ public class AltosSerial extends AltosLink { private void putc(char c) { if (altos != null) if (libaltos.altos_putchar(altos, c) != 0) { - libaltos.altos_close(altos); - altos = null; - abort_reply(); + close_serial(); } } -- 2.30.2