Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <campbell@blender.org>2022-10-20 00:51:24 +0300
committerCampbell Barton <campbell@blender.org>2022-10-20 02:03:55 +0300
commit09e3ea49dbbec15a8fcc79cc609f6dc8c13bc91f (patch)
treeec5b357e1242ca731bfb9130cc405ea5070be586 /intern/ghost
parentc67975c6bb70c6f877b005bbefcef71f2045b34b (diff)
GHOST/Wayland: clear data source pointer when canceled
The external cancel callback destroyed the data source but didn't clear the pointer. While this didn't cause problems, avoid keeping references freed pointers.
Diffstat (limited to 'intern/ghost')
-rw-r--r--intern/ghost/intern/GHOST_SystemWayland.cpp7
1 files changed, 6 insertions, 1 deletions
diff --git a/intern/ghost/intern/GHOST_SystemWayland.cpp b/intern/ghost/intern/GHOST_SystemWayland.cpp
index c0c55fb4cfa..5b6963dde7a 100644
--- a/intern/ghost/intern/GHOST_SystemWayland.cpp
+++ b/intern/ghost/intern/GHOST_SystemWayland.cpp
@@ -1277,9 +1277,14 @@ static void data_source_handle_send(void *data,
close(fd);
}
-static void data_source_handle_cancelled(void * /*data*/, struct wl_data_source *wl_data_source)
+static void data_source_handle_cancelled(void *data, struct wl_data_source *wl_data_source)
{
CLOG_INFO(LOG, 2, "cancelled");
+ GWL_Seat *seat = static_cast<GWL_Seat *>(data);
+ GWL_DataSource *data_source = seat->data_source;
+ GHOST_ASSERT(seat->data_source->wl_data_source == wl_data_source, "Data source mismatch!");
+ data_source->wl_data_source = nullptr;
+
wl_data_source_destroy(wl_data_source);
}