]> sigrok.org Git - libsigrok.git/commitdiff
Don't reset instance list in scan() callback
authorLars-Peter Clausen <redacted>
Sun, 15 May 2016 15:20:51 +0000 (17:20 +0200)
committerUwe Hermann <redacted>
Fri, 27 May 2016 12:43:34 +0000 (14:43 +0200)
Some drivers set the device instance list to NULL in their scan() callback.
This means the driver loses all references to any devices contained in that
list and their resources will be leaked. Drivers can't free the devices at
this point either since an application might still use a device on the
list. So the existing devices on the instance list need to remain
unmodified during the scan() callback, even if that means that there will
be duplicates on the instance list. Only an explicit invocation of
sr_dev_clear() by the application is allowed to free the devices on the
instance list and reset the list.

Signed-off-by: Lars-Peter Clausen <redacted>
23 files changed:
src/hardware/agilent-dmm/api.c
src/hardware/appa-55ii/api.c
src/hardware/arachnid-labs-re-load-pro/api.c
src/hardware/atten-pps3xxx/api.c
src/hardware/beaglelogic/api.c
src/hardware/brymen-bm86x/api.c
src/hardware/brymen-dmm/api.c
src/hardware/chronovu-la/api.c
src/hardware/colead-slm/api.c
src/hardware/conrad-digi-35-cpu/api.c
src/hardware/ftdi-la/api.c
src/hardware/gmc-mh-1x-2x/api.c
src/hardware/ikalogic-scanalogic2/api.c
src/hardware/kecheng-kc-330b/api.c
src/hardware/korad-kaxxxxp/api.c
src/hardware/lecroy-logicstudio/api.c
src/hardware/manson-hcs-3xxx/api.c
src/hardware/motech-lps-30x/api.c
src/hardware/norma-dmm/api.c
src/hardware/teleinfo/api.c
src/hardware/testo/api.c
src/hardware/tondaj-sl-814/api.c
src/hardware/uni-t-ut32x/api.c

index 514a2d276881b8444f8099b2edbbe76285cf7e05..78e7efe8e4a79cace8ec0ac56b7e0c623a1fb321 100644 (file)
@@ -83,7 +83,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options)
        char *buf, **tokens;
 
        drvc = di->context;
-       drvc->instances = NULL;
 
        devices = NULL;
        conn = serialcomm = NULL;
index d6c5d6a93bdbfa656a59ae4df5175b9c5a7780cc..c5700011219e0d60dc45a2aa082c590aed6dfc7e 100644 (file)
@@ -81,7 +81,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options)
        sr_info("Probing serial port %s.", conn);
 
        drvc = di->context;
-       drvc->instances = NULL;
        serial_flush(serial);
 
        /* Let's get a bit of data and see if we can find a packet. */
index aeacda1046d5a1cd39a5f2ec8f703e7cee8efd35..6deb681543553df3f5e6f15c21b73946559fa764 100644 (file)
@@ -74,7 +74,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options)
 
        devices = NULL;
        drvc = di->context;
-       drvc->instances = NULL;
 
        conn = serialcomm = NULL;
        for (l = options; l; l = l->next) {
index e1ec5f0b2b87683c38afedf1d7307ea7a2589205..7fd3b678c8693cae66300abc9321ccdcb212b86c 100644 (file)
@@ -94,7 +94,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options, int modelid)
 
        devices = NULL;
        drvc = di->context;
-       drvc->instances = NULL;
 
        conn = serialcomm = NULL;
        for (l = options; l; l = l->next) {
index 6deafb8102f93234eb12e342a4b1870f9a2d1b0d..10f9a0fbe3a80db0b07470b601a942d6535137f2 100644 (file)
@@ -82,7 +82,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options)
 
        devices = NULL;
        drvc = di->context;
-       drvc->instances = NULL;
 
        /* Probe for /dev/beaglelogic */
        if (!g_file_test(BEAGLELOGIC_DEV_NODE, G_FILE_TEST_EXISTS))
index eb41b845fdfc3f6d8bbf60679548169986b1ce03..64acf323423edf227e0732a3fdd1c5d2fda3e0cd 100644 (file)
@@ -44,7 +44,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options)
        const char *conn;
 
        drvc = di->context;
-       drvc->instances = NULL;
 
        conn = BRYMEN_BC86X;
        for (l = options; l; l = l->next) {
index 595ea99b7e7298942a16bbec81d92f5a440eb232..0e9034d3fe97d08829ed5f66c5b50098d76ccf08 100644 (file)
@@ -97,7 +97,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options)
 
        devices = NULL;
        drvc = di->context;
-       drvc->instances = NULL;
 
        conn = serialcomm = NULL;
        for (l = options; l; l = l->next) {
index 5c58e4f96b1e3027f8860fd50aa39ca8e3ccb764..d1a7ec712cbf6ea82128ddef4418332dc7db17ec 100644 (file)
@@ -149,7 +149,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options)
        char product[64], serial_num[64], connection_id[64];
 
        drvc = di->context;
-       drvc->instances = NULL;
 
        conn = NULL;
        for (l = options; l; l = l->next) {
index bbb6a957e3f66b48bc7dafb78229cc5b26c8dcae..bc59fd63c7f7def667d5be4cc29c33e49883be49 100644 (file)
@@ -52,7 +52,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options)
        const char *conn, *serialcomm;
 
        drvc = di->context;
-       drvc->instances = NULL;
 
        devices = NULL;
 
index 63c0e4f18703f2614b31740ce5fbeec3cd657a1c..44f9f26646fa7683eecd063fe646dff14c60b326 100644 (file)
@@ -50,7 +50,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options)
 
        devices = NULL;
        drvc = di->context;
-       drvc->instances = NULL;
        conn = serialcomm = NULL;
 
        for (l = options; l; l = l->next) {
index 7bf0e13d5a3b077cd57a2e0b2f6d1509fe9fe23a..5f5639f93cee1d7ffe8e773503dff9f9a42ca2dc 100644 (file)
@@ -209,7 +209,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options)
        int i;
 
        drvc = di->context;
-       drvc->instances = NULL;
        conn = NULL;
        for (l = options; l; l = l->next) {
                src = l->data;
index 629a3f2b16c9916fc9d2df3fc24fa41c823367bf..7ba93e4ed87492265127be296899e586e98ca67d 100644 (file)
@@ -155,7 +155,6 @@ static GSList *scan_1x_2x_rs232(struct sr_dev_driver *di, GSList *options)
 
        devices = NULL;
        drvc = di->context;
-       drvc->instances = NULL;
        conn = serialcomm = NULL;
        serialcomm_given = FALSE;
 
@@ -249,7 +248,6 @@ static GSList *scan_2x_bd232(struct sr_dev_driver *di, GSList *options)
        devices = NULL;
 
        drvc = di->context;
-       drvc->instances = NULL;
 
        sr_spew("scan_2x_bd232() called!");
 
index c30c605c88444a71da4bbad89083c4fe9092419f..0c6b8987e08149be2c38c3792f26174227882983 100644 (file)
@@ -67,7 +67,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options)
 
        devices = NULL;
        drvc = di->context;
-       drvc->instances = NULL;
 
        usb_devices = sr_usb_find(drvc->sr_ctx->libusb_ctx, USB_VID_PID);
 
index f67d253238dc1e3dfe88f73085585d6a6d9b55ea..fcd08eca2e59f3edc94a7b5048ce8b7ff2aa369a 100644 (file)
@@ -112,7 +112,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options)
        (void)options;
 
        drvc = di->context;
-       drvc->instances = NULL;
 
        devices = NULL;
        if ((usb_devices = sr_usb_find(drvc->sr_ctx->libusb_ctx, USB_CONN))) {
index 02abc7ca4b3c960d729cf304f6d05d5cb801e2be..bd80b6e1b5e22e0db693f6222b9105586de625bc 100644 (file)
@@ -79,7 +79,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options)
        conn = NULL;
        serialcomm = NULL;
        drvc = di->context;
-       drvc->instances = NULL;
 
        for (l = options; l; l = l->next) {
                src = l->data;
index 20ffcf2f8735c1b664ca9577ede3269ad0aabe7b..69852b28ad49dd76b19aaca3e1d32241586f44c7 100644 (file)
@@ -120,7 +120,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options)
        (void)options;
 
        drvc = di->context;
-       drvc->instances = NULL;
 
        devices = NULL;
 
index 52695b0bfdb95b4511639e2e4d43ca4f74711ea5..0b0a053e7bd2630854eab1abf8365ebdfd9a6d22 100644 (file)
@@ -86,7 +86,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options)
        char reply[50], **tokens, *dummy;
 
        drvc = di->context;
-       drvc->instances = NULL;
        devices = NULL;
        conn = NULL;
        serialcomm = NULL;
index 1c5e3876382464d03cf4ed2c774cca009c338ecd..ce3294e979271921e299d74e62e0f815b37b54d4 100644 (file)
@@ -384,7 +384,6 @@ static GSList *do_scan(lps_modelid modelid, struct sr_dev_driver *drv, GSList *o
        devices = NULL;
 
        drvc = drv->context;
-       drvc->instances = NULL;
 
        sr_spew("scan() called!");
 
index ee1c59ca30eb341cf2872204e92921e82c1795ce..024bcaed13c139387514bf1b208c476511de0ccd 100644 (file)
@@ -80,7 +80,6 @@ static GSList *scan(struct sr_dev_driver *drv, GSList *options)
 
        devices = NULL;
        drvc = drv->context;
-       drvc->instances = NULL;
        conn = serialcomm = NULL;
 
        for (l = options; l; l = l->next) {
index f05db75a5cfaba23715d38ac173c33dc502b6f70..f5920c5b52105d8507d8dfbc916be044b0a9a953 100644 (file)
@@ -74,7 +74,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options)
        sr_info("Probing serial port %s.", conn);
 
        drvc = di->context;
-       drvc->instances = NULL;
        serial_flush(serial);
 
        /* Let's get a bit of data and see if we can find a packet. */
index 8e60f6b892fb72e03d4974e31a7a5819767ebe88..505df6757a6ae7744825cfbf882e31df0f1b6065 100644 (file)
@@ -58,7 +58,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options)
 
        devices = NULL;
        drvc = di->context;
-       drvc->instances = NULL;
 
        conn_devices = NULL;
        for (l = options; l; l = l->next) {
index f647b6a9f26243cb92481c497ee93eff0c1ec271..d79bc03d53ac4b60714cf829a826dc4c5e089a50 100644 (file)
@@ -50,7 +50,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options)
        struct sr_serial_dev_inst *serial;
 
        drvc = di->context;
-       drvc->instances = NULL;
 
        devices = NULL;
 
index 789b72def626ca97bbbad01ae6965b3480d25093..147ac7dfe6f041be7b3e4d24d6bf7ef028fdc885 100644 (file)
@@ -48,7 +48,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options)
        const char *conn;
 
        drvc = di->context;
-       drvc->instances = NULL;
 
        conn = NULL;
        for (l = options; l; l = l->next) {