diff --git a/clutter/wayland/clutter-wayland-surface.c b/clutter/wayland/clutter-wayland-surface.c index 667f11713..9a163cd4c 100644 --- a/clutter/wayland/clutter-wayland-surface.c +++ b/clutter/wayland/clutter-wayland-surface.c @@ -168,12 +168,29 @@ clutter_wayland_surface_init (ClutterWaylandSurface *self) g_signal_connect (self, "notify::opacity", G_CALLBACK (opacity_change_cb), NULL); } +static void +free_surface_buffers (ClutterWaylandSurface *self) +{ + ClutterWaylandSurfacePrivate *priv = self->priv; + + if (priv->buffer) + { + cogl_object_unref (priv->buffer); + priv->buffer = NULL; + free_pipeline (self); + } +} + static void clutter_wayland_surface_dispose (GObject *object) { ClutterWaylandSurface *self = CLUTTER_WAYLAND_SURFACE (object); ClutterWaylandSurfacePrivate *priv = self->priv; + free_pipeline (self); + free_surface_buffers (self); + priv->surface = NULL; + G_OBJECT_CLASS (clutter_wayland_surface_parent_class)->dispose (object); } @@ -424,19 +441,6 @@ clutter_wayland_surface_new (struct wl_surface *surface) return actor; } -static void -free_surface_buffers (ClutterWaylandSurface *self) -{ - ClutterWaylandSurfacePrivate *priv = self->priv; - - if (priv->buffer) - { - cogl_object_unref (priv->buffer); - priv->buffer = NULL; - free_pipeline (self); - } -} - /** * clutter_wayland_surface_attach_buffer: * @self: A #ClutterWaylandSurface actor