Fix the iteration in clutter_group_remove_all()
authorEmmanuele Bassi <ebassi@openedhand.com>
Wed, 4 Jul 2007 12:29:50 +0000 (12:29 +0000)
committerEmmanuele Bassi <ebassi@openedhand.com>
Wed, 4 Jul 2007 12:29:50 +0000 (12:29 +0000)
When iterating on a list while changing it, it's a good idea to keep
pointers around to avoid dirty access bugs.

clutter/clutter-group.c

index a879f4f..9073e1b 100644 (file)
@@ -265,7 +265,6 @@ clutter_group_real_remove (ClutterContainer *container,
     clutter_actor_queue_redraw (CLUTTER_ACTOR (group));
 
   g_object_unref (actor);
-
 }
 
 static void
@@ -454,13 +453,15 @@ clutter_group_remove (ClutterGroup *group,
 void
 clutter_group_remove_all (ClutterGroup *group)
 {
-  GList *l;
+  GList *children;
 
   g_return_if_fail (CLUTTER_IS_GROUP (group));
 
-  for (l = group->priv->children; l; l = l->next)
+  children = group->priv->children;
+  while (children)
     {
-      ClutterActor *child = l->data;
+      ClutterActor *child = children->data;
+      children = children->next;
 
       clutter_container_remove_actor (CLUTTER_CONTAINER (group), child);
     }