From 3ea5437dbd07d9a94aebbb651d8f8eeacc8765bd Mon Sep 17 00:00:00 2001 From: Greg V Date: Sun, 22 Jul 2018 11:36:21 +0100 Subject: [PATCH] xwayland/selection: do not remove NULL property_source Happened mostly with neovim's xclip usage. [daniels: Added more cases.] Reviewed-by: Daniel Stone --- xwayland/selection.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/xwayland/selection.c b/xwayland/selection.c index a7555704..59702246 100644 --- a/xwayland/selection.c +++ b/xwayland/selection.c @@ -370,7 +370,8 @@ weston_wm_read_data_source(int fd, uint32_t mask, void *data) if (len == -1) { weston_log("read error from data source: %m\n"); weston_wm_send_selection_notify(wm, XCB_ATOM_NONE); - wl_event_source_remove(wm->property_source); + if (wm->property_source) + wl_event_source_remove(wm->property_source); wm->property_source = NULL; close(fd); wl_array_release(&wm->source_data); @@ -394,7 +395,8 @@ weston_wm_read_data_source(int fd, uint32_t mask, void *data) 1, &incr_chunk_size); wm->selection_property_set = 1; wm->flush_property_on_delete = 1; - wl_event_source_remove(wm->property_source); + if (wm->property_source) + wl_event_source_remove(wm->property_source); wm->property_source = NULL; weston_wm_send_selection_notify(wm, wm->selection_request.property); } else if (wm->selection_property_set) { @@ -402,7 +404,8 @@ weston_wm_read_data_source(int fd, uint32_t mask, void *data) "property delete\n", wm->source_data.size); wm->flush_property_on_delete = 1; - wl_event_source_remove(wm->property_source); + if (wm->property_source) + wl_event_source_remove(wm->property_source); wm->property_source = NULL; } else { weston_log("got %zu bytes, " @@ -416,7 +419,8 @@ weston_wm_read_data_source(int fd, uint32_t mask, void *data) weston_wm_flush_source_data(wm); weston_wm_send_selection_notify(wm, wm->selection_request.property); xcb_flush(wm->conn); - wl_event_source_remove(wm->property_source); + if (wm->property_source) + wl_event_source_remove(wm->property_source); wm->property_source = NULL; close(fd); wl_array_release(&wm->source_data); @@ -435,7 +439,8 @@ weston_wm_read_data_source(int fd, uint32_t mask, void *data) weston_wm_flush_source_data(wm); } xcb_flush(wm->conn); - wl_event_source_remove(wm->property_source); + if (wm->property_source) + wl_event_source_remove(wm->property_source); wm->property_source = NULL; close(wm->data_source_fd); wm->data_source_fd = -1;