From 7d9316a52d935ce6c9f4ae3030c975d660a02db6 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Tue, 28 Apr 2009 19:57:49 +0200 Subject: song_save: don't call tag_free(NULL) When a song was in the database twice (which shouldn't happen), and the first song had no tag items, MPD calledd tag_free(NULL). Add a check to that source location, and an assertion to tag_free(). --- src/song_save.c | 3 ++- src/tag.c | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/song_save.c b/src/song_save.c index 1d2724e83..8f4e1614d 100644 --- a/src/song_save.c +++ b/src/song_save.c @@ -80,7 +80,8 @@ insertSongIntoList(struct songvec *sv, struct song *newsong) tag_end_add(newsong->tag); } else { /* prevent dupes, just update the existing song info */ if (existing->mtime != newsong->mtime) { - tag_free(existing->tag); + if (existing->tag != NULL) + tag_free(existing->tag); if (newsong->tag) tag_end_add(newsong->tag); existing->tag = newsong->tag; diff --git a/src/tag.c b/src/tag.c index a75ef6ba5..34205d20d 100644 --- a/src/tag.c +++ b/src/tag.c @@ -163,6 +163,8 @@ void tag_free(struct tag *tag) { int i; + assert(tag != NULL); + g_mutex_lock(tag_pool_lock); for (i = tag->num_items; --i >= 0; ) tag_pool_put_item(tag->items[i]); -- cgit v1.2.3