summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPo Lu <luangruo@yahoo.com>2022-12-04 21:54:52 +0800
committerPo Lu <luangruo@yahoo.com>2022-12-04 21:56:23 +0800
commit3e00e50ee3d54537b8390b8d386387d01ae7553d (patch)
tree7948478e0f6344fdd4efa3aa37c640537b09d430
parenta51743dbcb793d1c02f1f40b107e752c2a095ab0 (diff)
downloademacs-3e00e50ee3d54537b8390b8d386387d01ae7553d.tar.gz
Fix potential crash deselecting for property change notifications
* src/xselect.c (x_cancel_selection_transfer): Catch errors around XSelectInput.
-rw-r--r--src/xselect.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/xselect.c b/src/xselect.c
index 120a5a163e2..121b17df1b0 100644
--- a/src/xselect.c
+++ b/src/xselect.c
@@ -794,8 +794,16 @@ x_cancel_selection_transfer (struct transfer *transfer)
transfer->requestor)
/* This can be called from x_delete_display. */
&& transfer->dpyinfo->display)
- XSelectInput (transfer->dpyinfo->display,
- transfer->requestor, NoEventMask);
+ {
+ /* Ignore errors generated by the change window request in case
+ the window has gone away. */
+ block_input ();
+ x_ignore_errors_for_next_request (transfer->dpyinfo);
+ XSelectInput (transfer->dpyinfo->display,
+ transfer->requestor, NoEventMask);
+ x_stop_ignoring_errors (transfer->dpyinfo);
+ unblock_input ();
+ }
cancel_atimer (transfer->timeout);
xfree (transfer);