diff --git a/modules/services_discovery/mtp.c b/modules/services_discovery/mtp.c
index 90d2bdfd88216d34a934ec5935782d356aad9b38..c28f9d63b1517890a6cbd8b3362e49a6e095cf78 100644
--- a/modules/services_discovery/mtp.c
+++ b/modules/services_discovery/mtp.c
@@ -219,6 +219,12 @@ static int AddDevice( services_discovery_t *p_sd,
                                                    sizeof( input_item_t * ) ) ) )
             {
                 free( psz_name );
+                while ( p_track ) {
+                    p_tmp = p_track;
+                    p_track = p_track->next;
+                    LIBMTP_destroy_track_t( p_tmp );
+                }
+                LIBMTP_Release_Device( p_device );
                 return VLC_ENOMEM;
             }
             p_sys->i_count = 0;