From 72b936f1ba51db4963c9fc4900ff2cff4921a8f0 Mon Sep 17 00:00:00 2001 From: Nicolas Pennequin Date: Fri, 5 Oct 2007 19:14:06 +0200 Subject: [PATCH] Fix playback stopping by closing all track handles on stop. Also change the order in which handles are closed. --- apps/playback.c | 33 +++++++++++++++++++++++++++------ 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/apps/playback.c b/apps/playback.c index 1c622f1af..9dc1514c1 100644 --- a/apps/playback.c +++ b/apps/playback.c @@ -400,9 +400,9 @@ void close_track_handles(struct track_info *track) if (!track) return; - if (track->audio_hid > 0) { - bufclose(track->audio_hid); - track->audio_hid = 0; + if (track->codec_hid > 0) { + bufclose(track->codec_hid); + track->codec_hid = 0; } if (track->id3_hid > 0) { @@ -410,9 +410,9 @@ void close_track_handles(struct track_info *track) track->id3_hid = 0; } - if (track->codec_hid > 0) { - bufclose(track->codec_hid); - track->codec_hid = 0; + if (track->audio_hid > 0) { + bufclose(track->audio_hid); + track->audio_hid = 0; } } @@ -2421,6 +2421,24 @@ static void audio_clear_track_entries(bool clear_unbuffered) } } +static void audio_release_tracks(void) +{ + int cur_idx = track_ridx; + + logf("releasing all tracks"); + + while (1) + { + cur_idx++; + cur_idx &= MAX_TRACK_MASK; + + if (cur_idx == track_widx) + break; + + close_track_handles(&tracks[cur_idx]); + } +} + /* FIXME: This code should be made more generic and move to metadata.c */ static void audio_strip_tags(void) { @@ -3401,6 +3419,9 @@ static void audio_stop_playback(void) /* Mark all entries null. */ audio_clear_track_entries(false); + + /* Close all tracks */ + audio_release_tracks(); } static void audio_play_start(size_t offset) -- 2.11.4.GIT