player: fix race condition during tag update

When a tag is updated, the old tag was freed before the new one was
created.  Reverse the order to be sure that other threads always see a
valid pointer.

This still leaves a possible race condition, but it will be addressed
later.
This commit is contained in:
Max Kellermann 2008-11-11 20:46:55 +01:00
parent acf0d141be
commit 1bfa6a94e2

View File

@ -225,11 +225,13 @@ play_chunk(struct song *song, struct music_chunk *chunk,
if (!song_is_file(song)) {
/* always update the tag of remote streams */
struct tag *old_tag = song->tag;
if (song->tag != NULL)
tag_free(song->tag);
song->tag = tag_dup(chunk->tag);
if (old_tag != NULL)
tag_free(old_tag);
/* notify all clients that the tag of the
current song has changed */
idle_add(IDLE_PLAYER);