diff options
author | Carlos Garnacho <carlosg@gnome.org> | 2015-11-24 17:41:58 +0100 |
---|---|---|
committer | Carlos Garnacho <carlosg@gnome.org> | 2015-11-24 20:52:12 +0100 |
commit | d62febcf97581528398f79e8094eb26f8461b315 (patch) | |
tree | 75a39b859e6bef5c3d1e6acbc85c3ad1e6e3f013 /gdk/wayland | |
parent | 0ff879e975a59b29ce7bebb456bc8c20b3c0b076 (diff) | |
download | gtk+-d62febcf97581528398f79e8094eb26f8461b315.tar.gz |
wayland: Plug surface leak
Other backends take care of the cairo surface destruction in
GdkWindow::destroy. We must do the same here, or the cairo_surface
and its corresponding wl_buffer are left dangling.
https://bugzilla.gnome.org/show_bug.cgi?id=747295
Diffstat (limited to 'gdk/wayland')
-rw-r--r-- | gdk/wayland/gdkdisplay-wayland.c | 4 | ||||
-rw-r--r-- | gdk/wayland/gdkwindow-wayland.c | 6 |
2 files changed, 9 insertions, 1 deletions
diff --git a/gdk/wayland/gdkdisplay-wayland.c b/gdk/wayland/gdkdisplay-wayland.c index 64529fb32c..804c1673e3 100644 --- a/gdk/wayland/gdkdisplay-wayland.c +++ b/gdk/wayland/gdkdisplay-wayland.c @@ -1029,6 +1029,8 @@ gdk_wayland_cairo_surface_destroy (void *p) { GdkWaylandCairoSurfaceData *data = p; + g_print ("EHMMMM...\n"); + if (data->buffer) wl_buffer_destroy (data->buffer); @@ -1056,6 +1058,8 @@ _gdk_wayland_display_create_shm_surface (GdkWaylandDisplay *display, data->scale = scale; data->busy = FALSE; + g_print ("create shm surface...\n"); + stride = width * 4; data->pool = create_shm_pool (display->shm, diff --git a/gdk/wayland/gdkwindow-wayland.c b/gdk/wayland/gdkwindow-wayland.c index 0834235b12..a536e1f1fa 100644 --- a/gdk/wayland/gdkwindow-wayland.c +++ b/gdk/wayland/gdkwindow-wayland.c @@ -1769,7 +1769,11 @@ gdk_wayland_window_destroy (GdkWindow *window, gdk_wayland_window_hide_surface (window); if (impl->cairo_surface) - cairo_surface_finish (impl->cairo_surface); + { + cairo_surface_finish (impl->cairo_surface); + cairo_surface_destroy (impl->cairo_surface); + impl->cairo_surface = NULL; + } } static void |