gsk/gl: use critical instead of assert in dispose
authorChristian Hergert <chergert@redhat.com>
Mon, 16 May 2022 17:50:07 +0000 (10:50 -0700)
committerChristian Hergert <chergert@redhat.com>
Mon, 16 May 2022 17:50:48 +0000 (10:50 -0700)
Instead of asserting only in debug builds (which are generally not
shipped in distributions) we should deliver a critical log-level message
so that these can be found sooner when not developing with jhbuild,
Flatpak, etc.

Also assert that we've setup the state correctly when realizing the
GskGLRenderer object.

Fixes #4625

gsk/gl/gskglrenderer.c

index afb34cd2f1472dcb179ec39207c1eb2e94503a95..67cc924cda6523d75bb316fd93950ba70a3f4786 100644 (file)
@@ -158,6 +158,10 @@ failure:
 
   gdk_profiler_end_mark (start_time, "realize GskGLRenderer", NULL);
 
+  /* Assert either all or no state was set */
+  g_assert ((ret && self->driver != NULL && self->context != NULL && self->command_queue != NULL) ||
+            (!ret && self->driver == NULL && self->context == NULL && self->command_queue == NULL));
+
   return ret;
 }
 
@@ -403,11 +407,11 @@ gsk_gl_renderer_render_texture (GskRenderer           *renderer,
 static void
 gsk_gl_renderer_dispose (GObject *object)
 {
-#ifdef G_ENABLE_DEBUG
   GskGLRenderer *self = (GskGLRenderer *)object;
 
-  g_assert (self->driver == NULL);
-#endif
+  if (self->driver != NULL)
+    g_critical ("Attempt to dispose %s without calling gsk_renderer_unrealize()",
+                G_OBJECT_TYPE_NAME (self));
 
   G_OBJECT_CLASS (gsk_gl_renderer_parent_class)->dispose (object);
 }