From 24b5e230faa811bdf2fb89e87beacac55354ceea Mon Sep 17 00:00:00 2001 From: =?utf8?q?Kristian=20H=C3=B8gsberg?= Date: Tue, 10 Apr 2012 11:32:35 -0400 Subject: [PATCH] window: Only unmap shm surface backing memory if it belongs to surface Memory allocated out of the resize shm pool will be unmapped when the pool is destroyed. --- clients/window.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/clients/window.c b/clients/window.c index 9be6764..8a682b4 100644 --- a/clients/window.c +++ b/clients/window.c @@ -464,7 +464,8 @@ shm_surface_data_destroy(void *p) struct shm_surface_data *data = p; wl_buffer_destroy(data->data.buffer); - munmap(data->map, data->length); + if (data->map) + munmap(data->map, data->length); } static struct wl_shm_pool * @@ -523,9 +524,10 @@ display_create_shm_surface(struct display *display, if (window && window->pool && data->length < window->pool_size) { pool = window->pool; map = window->pool_data; + data->map = NULL; } else { - pool = make_shm_pool(display, data->length, &data->map); - map = data->map; + pool = make_shm_pool(display, data->length, &map); + data->map = map; } surface = cairo_image_surface_create_for_data (map, @@ -547,7 +549,7 @@ display_create_shm_surface(struct display *display, rectangle->height, stride, format); - if (map == data->map) + if (data->map) wl_shm_pool_destroy(pool); return surface; -- 2.7.4