From 5bbff20b8d593ad55efa4b31ea520519d6d988c9 Mon Sep 17 00:00:00 2001 From: emersion Date: Sun, 28 Jan 2018 21:17:44 +0100 Subject: [PATCH] Fix assertion failed in data_source_notify_finish --- types/wlr_data_device.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/types/wlr_data_device.c b/types/wlr_data_device.c index 5a6bc198..c359be79 100644 --- a/types/wlr_data_device.c +++ b/types/wlr_data_device.c @@ -173,16 +173,19 @@ static void data_offer_resource_destroy(struct wl_resource *resource) { goto out; } - offer->source->offer = NULL; - // If the drag destination has version < 3, wl_data_offer.finish // won't be called, so do this here as a safety net, because // we still want the version >= 3 drag source to be happy. if (wl_resource_get_version(offer->resource) < WL_DATA_OFFER_ACTION_SINCE_VERSION) { data_source_notify_finish(offer->source); + offer->source->offer = NULL; } else if (offer->source->dnd_finish) { + // source->cancel can free the source + offer->source->offer = NULL; offer->source->cancel(offer->source); + } else { + offer->source->offer = NULL; } out: