layer: fix ownership when failing to add clip
authorHenry Wilkes <hwilkes@igalia.com>
Tue, 18 Feb 2020 09:17:09 +0000 (09:17 +0000)
committerThibault Saunier <tsaunier@igalia.com>
Thu, 5 Mar 2020 20:04:51 +0000 (17:04 -0300)
If a clip is already part of a layer, then adding it to another layer
should fail. Previously, in this case, `ges_layer_add_clip` was adding a
reference to the clip instead, without subsequently giving up ownership.
This meant that the clip would be left with an unowned reference.
This has now been corrected by also calling `unref` after the
`ref_sink`.

Note that, since `clip` is already part of `current_layer`, it should
already be non-floating, so the `ref_sink`-`unref` should do nothing
overall. But we keep both to make the ownership (transfer floating/none)
explicit.

ges/ges-layer.c

index 71eccde..9e51010 100644 (file)
@@ -631,9 +631,8 @@ ges_layer_add_clip (GESLayer * layer, GESClip * clip)
   current_layer = ges_clip_get_layer (clip);
   if (G_UNLIKELY (current_layer)) {
     GST_WARNING ("Clip %p already belongs to another layer", clip);
-    /* FIXME: why are we reffing the clip if it belongs to another
-     * layer? */
     gst_object_ref_sink (clip);
+    gst_object_unref (clip);
     gst_object_unref (current_layer);
 
     return FALSE;