]> sigrok.org Git - libsigrok.git/commitdiff
std: avoid doube close
authorWolfram Sang <redacted>
Sat, 11 Apr 2020 20:45:00 +0000 (22:45 +0200)
committerUwe Hermann <redacted>
Wed, 24 Jun 2020 21:20:41 +0000 (23:20 +0200)
I want to fix this double-close issue I see with my OLS:

First close at the end of a 'scan':

sr: [00:00.045171] openbench-logic-sniffer: Got metadata key 0x00, metadata ends.
sr: [00:00.045178] openbench-logic-sniffer: Disabling demux mode.
sr: [00:00.045186] serial: Closing serial port /dev/ttyACM0.

Second one as part of hwdriver cleanup:

sr: [00:00.046088] hwdriver: Cleaning up all drivers.
sr: [00:00.046108] serial: Closing serial port /dev/ttyACM0.
sr: [00:00.046116] serial-libsp: Cannot close unopened serial port /dev/ttyACM0.

So, before closing a second time, check if the device is not idle.

I am optimistic this could fix bugs #1151 and #1275, too.

Signed-off-by: Wolfram Sang <redacted>
src/std.c

index d3a3d36dd175b6886882f42b1d6e7ab8764bcf96..d1e2eedf784289eeaf72323e608a84ba99956ab2 100644 (file)
--- a/src/std.c
+++ b/src/std.c
@@ -424,7 +424,7 @@ SR_PRIV int std_dev_clear_with_callback(const struct sr_dev_driver *driver,
                        ret = SR_ERR_BUG;
                        continue;
                }
                        ret = SR_ERR_BUG;
                        continue;
                }
-               if (driver->dev_close)
+               if (driver->dev_close && sdi->status == SR_ST_ACTIVE)
                        driver->dev_close(sdi);
 
                if (sdi->conn) {
                        driver->dev_close(sdi);
 
                if (sdi->conn) {