| Index: src/libusb1-glue.c
|
| ===================================================================
|
| --- src/libusb1-glue.c (revision 178434)
|
| +++ src/libusb1-glue.c (working copy)
|
| @@ -541,6 +541,7 @@
|
| }
|
| }
|
| }
|
| + libusb_free_device_list (devs, 0);
|
|
|
| /* If nothing was found we end up here. */
|
| if(*mtp_device_list == NULL) {
|
| @@ -969,8 +970,10 @@
|
| }
|
| }
|
| int getfunc_ret = handler->getfunc(NULL, handler->priv,towrite,bytes,&towrite);
|
| - if (getfunc_ret != PTP_RC_OK)
|
| + if (getfunc_ret != PTP_RC_OK) {
|
| + free(bytes);
|
| return getfunc_ret;
|
| + }
|
| while (usbwritten < towrite) {
|
| ret = USB_BULK_WRITE(ptp_usb->handle,
|
| ptp_usb->outep,
|
| @@ -982,6 +985,7 @@
|
| LIBMTP_USB_DEBUG("USB OUT==>\n");
|
|
|
| if (ret != LIBUSB_SUCCESS) {
|
| + free(bytes);
|
| return PTP_ERROR_IO;
|
| }
|
| LIBMTP_USB_DATA(bytes+usbwritten, xwritten, 16);
|
| @@ -1004,6 +1008,7 @@
|
| ptp_usb->current_transfer_total,
|
| ptp_usb->current_transfer_callback_data);
|
| if (ret != 0) {
|
| + free(bytes);
|
| return PTP_ERROR_CANCEL;
|
| }
|
| }
|
| @@ -2036,6 +2041,7 @@
|
| /* Attempt to initialize this device */
|
| if (init_ptp_usb(params, ptp_usb, ldevice) < 0) {
|
| LIBMTP_ERROR("LIBMTP PANIC: Unable to initialize device\n");
|
| + libusb_free_device_list (devs, 0);
|
| return LIBMTP_ERROR_CONNECTING;
|
| }
|
|
|
| @@ -2051,12 +2057,14 @@
|
|
|
| if(init_ptp_usb(params, ptp_usb, ldevice) <0) {
|
| LIBMTP_ERROR("LIBMTP PANIC: Could not init USB on second attempt\n");
|
| + libusb_free_device_list (devs, 0);
|
| return LIBMTP_ERROR_CONNECTING;
|
| }
|
|
|
| /* Device has been reset, try again */
|
| if ((ret = ptp_opensession(params, 1)) == PTP_ERROR_IO) {
|
| LIBMTP_ERROR("LIBMTP PANIC: failed to open session on second attempt\n");
|
| + libusb_free_device_list (devs, 0);
|
| return LIBMTP_ERROR_CONNECTING;
|
| }
|
| }
|
| @@ -2073,11 +2081,13 @@
|
| "(Return code %d)\n Try to reset the device.\n",
|
| ret);
|
| libusb_release_interface(ptp_usb->handle, ptp_usb->interface);
|
| + libusb_free_device_list (devs, 0);
|
| return LIBMTP_ERROR_CONNECTING;
|
| }
|
|
|
| /* OK configured properly */
|
| *usbinfo = (void *) ptp_usb;
|
| + libusb_free_device_list (devs, 0);
|
| return LIBMTP_ERROR_NONE;
|
| }
|
|
|
|
|