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:
parent
acf0d141be
commit
1bfa6a94e2
@ -225,11 +225,13 @@ play_chunk(struct song *song, struct music_chunk *chunk,
|
|||||||
|
|
||||||
if (!song_is_file(song)) {
|
if (!song_is_file(song)) {
|
||||||
/* always update the tag of remote streams */
|
/* 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);
|
song->tag = tag_dup(chunk->tag);
|
||||||
|
|
||||||
|
if (old_tag != NULL)
|
||||||
|
tag_free(old_tag);
|
||||||
|
|
||||||
/* notify all clients that the tag of the
|
/* notify all clients that the tag of the
|
||||||
current song has changed */
|
current song has changed */
|
||||||
idle_add(IDLE_PLAYER);
|
idle_add(IDLE_PLAYER);
|
||||||
|
Loading…
Reference in New Issue
Block a user