From 04f10ba570124ef337567fdfec51488ba0d17a24 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sat, 27 Oct 2018 11:34:54 +0530 Subject: [PATCH] Fix leak of Wayland callback structure when doing a copy --- glfw/wl_window.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/glfw/wl_window.c b/glfw/wl_window.c index f19a2c6b0..708843fd9 100644 --- a/glfw/wl_window.c +++ b/glfw/wl_window.c @@ -1787,16 +1787,14 @@ const static struct wl_data_device_listener data_device_listener = { static void copy_callback_done(void *data, struct wl_callback *callback, uint32_t serial) { - if (!_glfw.wl.dataDevice) return; - if (data == (void*)_glfw.wl.dataSourceForClipboard) { - wl_data_device_set_selection(_glfw.wl.dataDevice, data, serial); + if (_glfw.wl.dataDevice) { + if (data == (void*)_glfw.wl.dataSourceForClipboard) { + wl_data_device_set_selection(_glfw.wl.dataDevice, data, serial); + } } + wl_callback_destroy(callback); } -const static struct wl_callback_listener copy_callback_listener = { - .done = copy_callback_done -}; - void _glfwSetupWaylandDataDevice() { _glfw.wl.dataDevice = wl_data_device_manager_get_data_device(_glfw.wl.dataDeviceManager, _glfw.wl.seat); if (_glfw.wl.dataDevice) wl_data_device_add_listener(_glfw.wl.dataDevice, &data_device_listener, NULL); @@ -1850,6 +1848,7 @@ void _glfwPlatformSetClipboardString(const char* string) wl_data_source_offer(_glfw.wl.dataSourceForClipboard, "STRING"); wl_data_source_offer(_glfw.wl.dataSourceForClipboard, "UTF8_STRING"); struct wl_callback *callback = wl_display_sync(_glfw.wl.display); + const static struct wl_callback_listener copy_callback_listener = {.done = copy_callback_done }; wl_callback_add_listener(callback, ©_callback_listener, _glfw.wl.dataSourceForClipboard); }