diff options
author | Emmanuele Bassi <ebassi@gnome.org> | 2021-01-20 19:10:54 +0000 |
---|---|---|
committer | Emmanuele Bassi <ebassi@gnome.org> | 2021-01-20 19:10:54 +0000 |
commit | 75f2d7583f5485b0a47326d4dac3dfb13b9307bc (patch) | |
tree | e51580a2bed57d54ce67d8daf44fcaa9efe3adbd | |
parent | a1216599ff6b39bca3e936fbf5d8442d3008eb5c (diff) | |
download | gtk+-75f2d7583f5485b0a47326d4dac3dfb13b9307bc.tar.gz |
Abort if the shared memory pool cannot be created
If we cannot allocate memory, we cannot create any windowing system
surface. There's no coming back from that.
Fixes: #3607
-rw-r--r-- | gdk/wayland/gdkdisplay-wayland.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/gdk/wayland/gdkdisplay-wayland.c b/gdk/wayland/gdkdisplay-wayland.c index f5ea972fa2..3acc10ed50 100644 --- a/gdk/wayland/gdkdisplay-wayland.c +++ b/gdk/wayland/gdkdisplay-wayland.c @@ -1350,21 +1350,23 @@ _gdk_wayland_display_create_shm_surface (GdkWaylandDisplay *display, data->buffer = NULL; data->scale = scale; - stride = cairo_format_stride_for_width (CAIRO_FORMAT_ARGB32, width*scale); + stride = cairo_format_stride_for_width (CAIRO_FORMAT_ARGB32, width * scale); data->pool = create_shm_pool (display->shm, - height*scale*stride, + height * scale * stride, &data->buf_length, &data->buf); + if (G_UNLIKELY (data->pool == NULL)) + g_error ("Unable to create shared memory pool"); surface = cairo_image_surface_create_for_data (data->buf, CAIRO_FORMAT_ARGB32, - width*scale, - height*scale, + width * scale, + height * scale, stride); data->buffer = wl_shm_pool_create_buffer (data->pool, 0, - width*scale, height*scale, + width * scale, height * scale, stride, WL_SHM_FORMAT_ARGB8888); cairo_surface_set_user_data (surface, &gdk_wayland_shm_surface_cairo_key, |