diff options
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | src/itdb_photoalbum.c | 12 |
2 files changed, 18 insertions, 1 deletions
@@ -1,3 +1,10 @@ +2007-11-13 Christophe Fergeau <teuf@gnome.org> + + * src/itdb_photoalbum.c: fix bug in itdb_photodb_photoalbum_remove, + when removing all the photos from the photodatabase, we were + erasing elements and iterating over the list at the same time, + which resulted in the function not working properly + ====== libgpod 0.6.0 ====== 2007-11-10 Christophe Fergeau <teuf@gnome.org> diff --git a/src/itdb_photoalbum.c b/src/itdb_photoalbum.c index 001b86a..7656a64 100644 --- a/src/itdb_photoalbum.c +++ b/src/itdb_photoalbum.c @@ -687,11 +687,21 @@ void itdb_photodb_photoalbum_remove (Itdb_PhotoDB *db, * and remove them from the database */ if (remove_pics) { - for (it = album->members; it != NULL; it = it->next ) + GList *pics; + /* we can't let itdb_photodb_remove_photo modify album->members + * while we're iterating through it, that's it's moved to pics + * first. itdb_photodb_remove_photo frees the memory used + * by 'photo' so a g_list_free is all we have to do to free + * pics memory when we are done iterating + */ + pics = album->members; + album->members = NULL; + for (it = pics; it != NULL; it = it->next ) { Itdb_Artwork *photo = it->data; itdb_photodb_remove_photo (db, NULL, photo); } + g_list_free (pics); } db->photoalbums = g_list_remove (db->photoalbums, album); itdb_photodb_photoalbum_free (album); |