renderer: Assert having been unrealized in dispose
authorBenjamin Otte <otte@redhat.com>
Sat, 4 Nov 2017 14:09:43 +0000 (15:09 +0100)
committerBenjamin Otte <otte@redhat.com>
Sat, 4 Nov 2017 14:22:25 +0000 (15:22 +0100)
We cannot unrealize a renderer in the dispose function, because that
would cause this chain to happen:
  gsk_gl_renderer_dispose
  gsk_renderer_dispose
  gsk_renderer_unrealize
  gsk_gl_renderer_unrealize
So we would call into thje GL renderers unrealize when it has already
(partially) disposed itself and ause accesses to dead variables.

gsk/gskrenderer.c

index c04bbc33de1cb3756c427d86a7201218717b2281..a769bd4c121e0922675d681cc727883af1e5d828 100644 (file)
@@ -170,7 +170,9 @@ gsk_renderer_dispose (GObject *gobject)
   GskRenderer *self = GSK_RENDERER (gobject);
   GskRendererPrivate *priv = gsk_renderer_get_instance_private (self);
 
-  gsk_renderer_unrealize (self);
+  /* We can't just unrealize here because superclasses have already run dispose.
+   * So we insist that unrealize must be called before unreffing. */
+  g_assert (!priv->is_realized);
 
   g_clear_object (&priv->profiler);
   g_clear_object (&priv->display);