diff options
author | Max Kellermann <max@duempel.org> | 2009-02-12 19:11:26 +0100 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2009-02-12 19:11:26 +0100 |
commit | 5f7153874ff827821c40eea9b715cb88e61867d8 (patch) | |
tree | 9abe6f1c7613ece88040b0360566b44539f01e67 | |
parent | 17197ae1f495aa492f09615d39d7eec14e163f5f (diff) | |
download | mpd-5f7153874ff827821c40eea9b715cb88e61867d8.tar.gz mpd-5f7153874ff827821c40eea9b715cb88e61867d8.tar.xz mpd-5f7153874ff827821c40eea9b715cb88e61867d8.zip |
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.
Diffstat (limited to '')
-rw-r--r-- | NEWS | 1 | ||||
-rw-r--r-- | src/update.c | 8 |
2 files changed, 7 insertions, 2 deletions
@@ -23,6 +23,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 48ca0c437..04272dd75 100644 --- a/src/update.c +++ b/src/update.c @@ -108,6 +108,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. @@ -118,8 +121,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); } |