pipeline: reclaim ownership if reverting to layer ancestor

In _cogl_pipeline_prune_empty_layer_difference if we are reverting to
the immediate parent of an empty/redundant layer then it is not enough
to simply add a reference to the pipeline's ->layer_differences list
without also updating parent_layer->owner to point back to its new
owner.

This oversight was leading us to break the invariable that all layers
referenced in layer_differences have an owner and was also causing us to
break another invariable whereby after calling
_cogl_pipeline_layer_pre_change_notify the returned layer must always be
owned by the given 'required_owner'.

http://bugzilla.clutter-project.org/show_bug.cgi?id=2588
This commit is contained in:
Robert Bragg 2011-04-05 17:01:24 +01:00
parent 12b622a320
commit 7de3655298

View File

@ -2194,7 +2194,8 @@ _cogl_pipeline_prune_empty_layer_difference (CoglPipeline *layers_authority,
if (layer_parent->index == layer->index && layer_parent->owner == NULL) if (layer_parent->index == layer->index && layer_parent->owner == NULL)
{ {
cogl_object_ref (layer_parent); cogl_object_ref (layer_parent);
link->data = _cogl_pipeline_layer_get_parent (layer); layer_parent->owner = layers_authority;
link->data = layer_parent;
cogl_object_unref (layer); cogl_object_unref (layer);
recursively_free_layer_caches (layers_authority); recursively_free_layer_caches (layers_authority);
return; return;