summaryrefslogtreecommitdiff
path: root/src/drivers/Wayland/Fl_Wayland_Graphics_Driver.cxx
diff options
context:
space:
mode:
authorManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com>2023-10-03 21:56:01 +0200
committerManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com>2023-10-03 21:56:01 +0200
commitaa14ffe6a1f1da1b88a19961ece236ff126a5fd6 (patch)
treec09f38af37cb80ff27ad4ccaee843b77e81a8a2e /src/drivers/Wayland/Fl_Wayland_Graphics_Driver.cxx
parentf8bf7e5da4976c7123f4889fd77b67ca6f0011bb (diff)
Fix fltk.coredev: mandelbrot demo segfault under Wayland
Diffstat (limited to 'src/drivers/Wayland/Fl_Wayland_Graphics_Driver.cxx')
-rw-r--r--src/drivers/Wayland/Fl_Wayland_Graphics_Driver.cxx26
1 files changed, 14 insertions, 12 deletions
diff --git a/src/drivers/Wayland/Fl_Wayland_Graphics_Driver.cxx b/src/drivers/Wayland/Fl_Wayland_Graphics_Driver.cxx
index 2e4aee842..0cc0d9c6a 100644
--- a/src/drivers/Wayland/Fl_Wayland_Graphics_Driver.cxx
+++ b/src/drivers/Wayland/Fl_Wayland_Graphics_Driver.cxx
@@ -212,20 +212,22 @@ void Fl_Wayland_Graphics_Driver::cairo_init(struct Fl_Wayland_Graphics_Driver::d
static void do_buffer_release(
struct Fl_Wayland_Graphics_Driver::wld_buffer *buffer) {
struct wl_shm_pool *my_pool = buffer->shm_pool;
- struct Fl_Wayland_Graphics_Driver::wld_shm_pool_data *pool_data =
+ if (buffer->wl_buffer) {
+ struct Fl_Wayland_Graphics_Driver::wld_shm_pool_data *pool_data =
(struct Fl_Wayland_Graphics_Driver::wld_shm_pool_data*)
- wl_shm_pool_get_user_data(my_pool);
- wl_buffer_destroy(buffer->wl_buffer);
- // remove wld_buffer from list of pool's buffers
- wl_list_remove(&buffer->link);
- free(buffer);
- if (wl_list_empty(&pool_data->buffers) && my_pool != pool) {
- // all buffers from pool are gone
- wl_shm_pool_destroy(my_pool);
- /*int err = */munmap(pool_data->pool_memory, pool_data->pool_size);
-//printf("do_buffer_release munmap(%p)->%d\n", pool_data->pool_memory, err);
- free(pool_data);
+ wl_shm_pool_get_user_data(my_pool);
+ wl_buffer_destroy(buffer->wl_buffer);
+ // remove wld_buffer from list of pool's buffers
+ wl_list_remove(&buffer->link);
+ if (wl_list_empty(&pool_data->buffers) && my_pool != pool) {
+ // all buffers from pool are gone
+ wl_shm_pool_destroy(my_pool);
+ /*int err = */munmap(pool_data->pool_memory, pool_data->pool_size);
+ //printf("do_buffer_release munmap(%p)->%d\n", pool_data->pool_memory, err);
+ free(pool_data);
+ }
}
+ free(buffer);
}