[clutter] group: Handle list modification while destroying children
- From: Robert Bragg <rbragg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [clutter] group: Handle list modification while destroying children
- Date: Fri, 17 Jun 2011 16:37:03 +0000 (UTC)
commit ddc9eb5fa5326904852951a3fa00159bed75fde1
Author: Robert Bragg <robert linux intel com>
Date: Fri Jun 17 16:23:35 2011 +0100
group: Handle list modification while destroying children
This makes the dispose code that destroys children resilient against
priv->children being modified during child destruction.
clutter/clutter-group.c | 12 +++++++-----
1 files changed, 7 insertions(+), 5 deletions(-)
---
diff --git a/clutter/clutter-group.c b/clutter/clutter-group.c
index d6c9897..41cb7d0 100644
--- a/clutter/clutter-group.c
+++ b/clutter/clutter-group.c
@@ -350,12 +350,14 @@ clutter_group_dispose (GObject *object)
ClutterGroup *self = CLUTTER_GROUP (object);
ClutterGroupPrivate *priv = self->priv;
- if (priv->children)
+ /* Note: we are careful to consider that destroying children could
+ * have the side-effect of destroying other children so
+ * priv->children may be modified during clutter_actor_destroy. */
+ while (priv->children)
{
- g_list_foreach (priv->children, (GFunc) clutter_actor_destroy, NULL);
- g_list_free (priv->children);
-
- priv->children = NULL;
+ ClutterActor *child = priv->children->data;
+ priv->children = g_list_delete_link (priv->children, priv->children);
+ clutter_actor_destroy (child);
}
if (priv->layout)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]