summaryrefslogtreecommitdiff
path: root/gusb/gusb-device-list.c
diff options
context:
space:
mode:
authorRichard Hughes <richard@hughsie.com>2011-08-11 11:24:19 +0200
committerRichard Hughes <richard@hughsie.com>2011-08-11 11:24:19 +0200
commit63fe7cd104c8bb71138db2c54c5502f8f28fa808 (patch)
tree062311a544b8c68a8b6665afefd04280b7c26238 /gusb/gusb-device-list.c
parentfdbe8ee3e0731d4e56b1723a9ed86af51d3fed36 (diff)
downloadgusb-63fe7cd104c8bb71138db2c54c5502f8f28fa808.tar.gz
Do not duplicate all devices if the user calls g_usb_device_list_coldplug() twice
Diffstat (limited to 'gusb/gusb-device-list.c')
-rw-r--r--gusb/gusb-device-list.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/gusb/gusb-device-list.c b/gusb/gusb-device-list.c
index 9d90894..1ecf08e 100644
--- a/gusb/gusb-device-list.c
+++ b/gusb/gusb-device-list.c
@@ -57,6 +57,7 @@ struct _GUsbDeviceListPrivate {
GUdevClient *udev;
GPtrArray *devices;
libusb_device **coldplug_list;
+ gboolean done_coldplug;
};
static void g_usb_device_list_uevent_cb (GUdevClient *client,
@@ -325,6 +326,8 @@ g_usb_device_list_coldplug (GUsbDeviceList *list)
GList *devices, *elem;
libusb_context *ctx = _g_usb_context_get_context (priv->context);
+ if (priv->done_coldplug)
+ return;
libusb_get_device_list (ctx, &priv->coldplug_list);
devices = g_udev_client_query_by_subsystem (priv->udev, "usb");
for (elem = g_list_first (devices); elem; elem = g_list_next (elem)) {
@@ -334,6 +337,7 @@ g_usb_device_list_coldplug (GUsbDeviceList *list)
g_list_free (devices);
libusb_free_device_list (priv->coldplug_list, 1);
priv->coldplug_list = NULL;
+ priv->done_coldplug = TRUE;
}
GUsbDevice *