Fixes the memory leak on devs. I think it's
better to keep a reference on the udev too,
but this could be changed.

---
 libfprint/core.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/libfprint/core.c b/libfprint/core.c
index 81b972e..1c48bf1 100644
--- a/libfprint/core.c
+++ b/libfprint/core.c
@@ -524,7 +524,7 @@ static struct fp_dscv_dev
*discover_dev(libusb_device *udev)
        ddev = g_malloc0(sizeof(*ddev));
        ddev->drv = drv;
-       ddev->udev = udev;
+       ddev->udev = libusb_ref_device(udev);
        ddev->driver_data = usb_id->driver_data;
        ddev->devtype = devtype;
        return ddev;
@@ -580,6 +580,7 @@ API_EXPORTED struct fp_dscv_dev **fp_discover_devs(void)
        }
        list[dscv_count] = NULL; /* NULL-terminate */
 +      libusb_free_device_list(devs, 1);
        g_slist_free(tmplist);
        return list;
 }
@@ -597,8 +598,10 @@ API_EXPORTED void fp_dscv_devs_free(struct
fp_dscv_dev **devs)
        if (!devs)
                return;
 -      for (i = 0; devs[i]; i++)
+       for (i = 0; devs[i]; i++) {
+               libusb_unref_device(devs[i]->udev);
                g_free(devs[i]);
+       }
        g_free(devs);
 }
 -- 2.7.4

_______________________________________________
fprint mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/fprint

Reply via email to