From: Pierre d'Herbemont Date: Thu, 28 Jan 2010 18:59:32 +0000 (+0100) Subject: macosx/framework: Fix a bunch of track related leaks. X-Git-Tag: 1.1.0-ff~725 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=19fe54b3682a40aaae37b6f7754d225e90148780;p=vlc macosx/framework: Fix a bunch of track related leaks. --- diff --git a/projects/macosx/framework/Sources/VLCMediaPlayer.m b/projects/macosx/framework/Sources/VLCMediaPlayer.m index d8e4243c48..acc2232c1f 100644 --- a/projects/macosx/framework/Sources/VLCMediaPlayer.m +++ b/projects/macosx/framework/Sources/VLCMediaPlayer.m @@ -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];