plug several memory leaks
diff --git a/src/libusbmuxd.c b/src/libusbmuxd.c
index 7ef58ea..442b6e0 100644
--- a/src/libusbmuxd.c
+++ b/src/libusbmuxd.c
@@ -829,12 +829,15 @@
 						plist_t props = plist_dict_get_item(pdev, "Properties");
 						dev = device_record_from_plist(props);
 						usbmuxd_device_info_t *devinfo = device_info_from_device_record(dev);
+						free(dev);
 						if (!devinfo) {
 							DEBUG(1, "%s: can't create device info object\n", __func__);
+							plist_free(list);
 							return -1;
 						}
 						collection_add(&tmpdevs, devinfo);
 					}
+					plist_free(list);
 					goto got_device_list;
 				}
 			} else {
@@ -843,8 +846,10 @@
 				}
 				socket_close(sfd);
 				try_list_devices = 0;
+				plist_free(list);
 				goto retry;
 			}
+			plist_free(list);
 		}
 	}
 
@@ -1103,8 +1108,7 @@
 		} else {
 			ret = -(int)rc;
 		}
-		if (pl)
-			plist_free(pl);
+		plist_free(pl);
 	}
 
 	return ret;
@@ -1150,8 +1154,7 @@
 		} else {
 			ret = -(int)rc;
 		}
-		if (pl)
-			plist_free(pl);
+		plist_free(pl);
 	}
 
 	return ret;