aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2009-02-12 19:11:26 +0100
committerMax Kellermann <max@duempel.org>2009-02-12 19:11:26 +0100
commit5f7153874ff827821c40eea9b715cb88e61867d8 (patch)
tree9abe6f1c7613ece88040b0360566b44539f01e67
parent17197ae1f495aa492f09615d39d7eec14e163f5f (diff)
downloadmpd-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.
-rw-r--r--NEWS1
-rw-r--r--src/update.c8
2 files changed, 7 insertions, 2 deletions
diff --git a/NEWS b/NEWS
index be4ef103c..1bd611034 100644
--- a/NEWS
+++ b/NEWS
@@ -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);
}