Index: src/libmtp.c
===================================================================
--- src/libmtp.c	(revision 178434)
+++ src/libmtp.c	(working copy)
@@ -1778,6 +1778,8 @@
             char *minorstr = strndup(element + i + 1, strlen(element) - i - 1);
             major = atoi(majorstr);
             minor = atoi(minorstr);
+	    free(majorstr);
+	    free(minorstr);
             extension = malloc(sizeof(LIBMTP_device_extension_t));
             extension->name = name;
             extension->major = major;
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;
 }
 
