playback/player: don't unref a contained widget

In the GTK+ model, when a wiget is created, it is floating, thus
when it is added to a widget container, this container is the owner
of the widget.

The video_area widget is created in two different paths:

1\ when the renderer element is also a GTK+ widget and we are
   the owners.
2\ when the renderer element is an overlay an video area a new
   widget owned by the container.

In the first code path, there was a memory leak fixed on commit
f8d4796a, but it didn't consider the second path, leading to a
segmentation fault because the owner of the widget is not us.

This patch unrefs early the video area widget in the first path
avoiding to unref it twice in the second path.

https://bugzilla.gnome.org/show_bug.cgi?id=781904
This commit is contained in:
Víctor Manuel Jáquez Leal 2017-04-28 17:12:25 +02:00 committed by Sebastian Dröge
parent ff1a6546da
commit dbb0375bfe

View file

@ -1425,6 +1425,7 @@ create_ui (GtkPlay * play)
play->video_area = play->video_area =
gst_player_gtk_video_renderer_get_widget (GST_PLAYER_GTK_VIDEO_RENDERER gst_player_gtk_video_renderer_get_widget (GST_PLAYER_GTK_VIDEO_RENDERER
(play->renderer)); (play->renderer));
g_object_unref (play->video_area);
} else { } else {
play->renderer = gst_player_video_overlay_video_renderer_new (NULL); play->renderer = gst_player_video_overlay_video_renderer_new (NULL);
@ -1778,7 +1779,6 @@ gtk_play_dispose (GObject * object)
g_object_unref (self->player); g_object_unref (self->player);
} }
self->player = NULL; self->player = NULL;
g_clear_object (&self->video_area);
G_OBJECT_CLASS (gtk_play_parent_class)->dispose (object); G_OBJECT_CLASS (gtk_play_parent_class)->dispose (object);
} }