gdk-wayland: Do not leak dummy 1x1 surface on every draw
authorDaniel Elstner <daniel.kitta@gmail.com>
Tue, 26 Sep 2017 19:13:40 +0000 (21:13 +0200)
committerDaniel Elstner <daniel.kitta@gmail.com>
Tue, 26 Sep 2017 19:15:21 +0000 (21:15 +0200)
When using EGL, neither leak nor re-create the dummy 1x1 Cairo
surface every time gdk_wayland_window_ensure_cairo_surface()
is called.

https://bugzilla.gnome.org/show_bug.cgi?id=775126

gdk/wayland/gdkwindow-wayland.c

index cde31e37780a170b3e3a7e6a7ebda5825a36db7b..e25c782d0fb42f21bc12894b61c6b32ca32347c5 100644 (file)
@@ -840,13 +840,16 @@ gdk_wayland_window_ensure_cairo_surface (GdkWindow *window)
     {
       if (impl->staging_cairo_surface &&
           _gdk_wayland_is_shm_surface (impl->staging_cairo_surface))
-        cairo_surface_destroy (impl->staging_cairo_surface);
+        g_clear_pointer (&impl->staging_cairo_surface, cairo_surface_destroy);
 
-      impl->staging_cairo_surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32,
-                                                                impl->scale,
-                                                                impl->scale);
-      cairo_surface_set_device_scale (impl->staging_cairo_surface,
-                                      impl->scale, impl->scale);
+      if (!impl->staging_cairo_surface)
+        {
+          impl->staging_cairo_surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32,
+                                                                    impl->scale,
+                                                                    impl->scale);
+          cairo_surface_set_device_scale (impl->staging_cairo_surface,
+                                          impl->scale, impl->scale);
+        }
     }
   else if (!impl->staging_cairo_surface)
     {