From df9245c2aae7518c813385f7cd721cc17ff27062 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Thu, 12 Feb 2009 19:11:26 +0100 Subject: update: free deleted subdirectories Use delete_directory() for removing sub directories instead of dirvec_clear(). This ensures that all memory occupied by subdirectories of deleted directories is freed. --- NEWS | 1 + src/update.c | 8 ++++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/NEWS b/NEWS index 8764db1b3..11826c0ce 100644 --- a/NEWS +++ b/NEWS @@ -61,6 +61,7 @@ ver 0.14.2 (2009/??/??) * mapper: remove trailing slashes from music_directory * player: set player error when output device fails * update: recursively purge deleted directories +* update: free deleted subdirectories ver 0.14.1 (2009/01/17) diff --git a/src/update.c b/src/update.c index 90b7cbe8f..17059ffe0 100644 --- a/src/update.c +++ b/src/update.c @@ -132,6 +132,9 @@ delete_each_song(struct song *song, G_GNUC_UNUSED void *data) return 0; } +static void +delete_directory(struct directory *directory); + /** * Recursively remove all sub directories and songs from a directory, * leaving an empty directory. @@ -142,8 +145,9 @@ clear_directory(struct directory *directory) int i; for (i = directory->children.nr; --i >= 0;) - clear_directory(directory->children.base[i]); - dirvec_clear(&directory->children); + delete_directory(directory->children.base[i]); + + assert(directory->children.nr == 0); songvec_for_each(&directory->songs, delete_each_song, directory); } -- cgit v1.2.3