From: Benjamin Otte Date: Sat, 4 Nov 2017 14:09:43 +0000 (+0100) Subject: renderer: Assert having been unrealized in dispose X-Git-Tag: archive/raspbian/4.4.1+ds1-2+rpi1^2~18^2~23^2~885 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=bd287ba3cf9293f360ea3f9093b8ef4389587f00;p=gtk4.git renderer: Assert having been unrealized in dispose 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. --- diff --git a/gsk/gskrenderer.c b/gsk/gskrenderer.c index c04bbc33de..a769bd4c12 100644 --- a/gsk/gskrenderer.c +++ b/gsk/gskrenderer.c @@ -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);