]> git.sesse.net Git - vlc/commitdiff
macosx/framework: Fix a bunch of track related leaks.
authorPierre d'Herbemont <pdherbemont@free.fr>
Thu, 28 Jan 2010 18:59:32 +0000 (19:59 +0100)
committerPierre d'Herbemont <pdherbemont@free.fr>
Fri, 29 Jan 2010 10:49:24 +0000 (11:49 +0100)
projects/macosx/framework/Sources/VLCMediaPlayer.m

index d8e4243c4855fb0462c3cc1ee4ff4ffb105a14b7..acc2232c1f8f88f7c29177c7caced8bfd324a5ad 100644 (file)
@@ -61,6 +61,14 @@ NSString * VLCMediaPlayerStateToString(VLCMediaPlayerState state)
     return stateToStrings[state];
 }
 
+static inline libvlc_track_description_t *freeAndGetNextTrack(libvlc_track_description_t *track)
+{
+    libvlc_track_description_t *next = track->p_next;
+    free(track->psz_name);
+    free(track);
+    return next;
+}
+
 /* libvlc event callback */
 static void HandleMediaInstanceVolumeChanged(const libvlc_event_t * event, void * self)
 {
@@ -321,10 +329,7 @@ static void HandleMediaPlayerMediaChanged(const libvlc_event_t * event, void * s
     NSMutableArray *tempArray = [NSMutableArray array];
     while (currentTrack) {
         [tempArray addObject:[NSString stringWithUTF8String:currentTrack->psz_name]];
-        free(currentTrack->psz_name);
-        libvlc_track_description_t *tofree = currentTrack;
-        currentTrack = currentTrack->p_next;
-        free(tofree);
+        currentTrack = freeAndGetNextTrack(currentTrack);
     }
     return [NSArray arrayWithArray: tempArray];
 }
@@ -521,7 +526,7 @@ static void HandleMediaPlayerMediaChanged(const libvlc_event_t * event, void * s
     for (i = 0; i < count ; i++)
     {
         [tempArray addObject:[NSString stringWithUTF8String: tracks->psz_name]];
-        tracks = tracks->p_next;
+        tracks = freeAndGetNextTrack(tracks);
     }
     return [NSArray arrayWithArray: tempArray];
 }
@@ -571,7 +576,7 @@ static void HandleMediaPlayerMediaChanged(const libvlc_event_t * event, void * s
     for (i = 0; i < [self countOfTitles] ; i++)
     {
         [tempArray addObject:[NSString stringWithUTF8String: tracks->psz_name]];
-        tracks = tracks->p_next;
+        tracks = freeAndGetNextTrack(tracks);
     }
     return [NSArray arrayWithArray: tempArray];
 }
@@ -615,7 +620,7 @@ static void HandleMediaPlayerMediaChanged(const libvlc_event_t * event, void * s
     for (i = 0; i < count ; i++)
     {
         [tempArray addObject:[NSString stringWithUTF8String: tracks->psz_name]];
-        tracks = tracks->p_next;
+        tracks = freeAndGetNextTrack(tracks);
     }
 
     return [NSArray arrayWithArray: tempArray];