]> git.eshelyaron.com Git - emacs.git/commitdiff
Prevent race conditions with async input during drag-and-drop
authorPo Lu <luangruo@yahoo.com>
Sat, 16 Apr 2022 11:12:04 +0000 (19:12 +0800)
committerPo Lu <luangruo@yahoo.com>
Sat, 16 Apr 2022 11:12:56 +0000 (19:12 +0800)
* src/xterm.c (XTread_socket): Don't read events here during
drag-and-drop, otherwise the right hold_quit might not be used
for selection events.

src/xterm.c

index dc33ba75569da5bec6cd94d25ec707779c6b8fe5..b65de88674ff3f6d24f866c10f0073f986538331 100644 (file)
@@ -18968,6 +18968,13 @@ XTread_socket (struct terminal *terminal, struct input_event *hold_quit)
   bool event_found = false;
   struct x_display_info *dpyinfo = terminal->display_info.x;
 
+  /* Don't allow XTread_socket to do anything if drag-and-drop is in
+     progress.  If unblock_input causes XTread_socket to be called and
+     read X events while the drag-and-drop event loop is in progress,
+     things can go wrong very quick.  */
+  if (x_dnd_in_progress || x_dnd_waiting_for_finish)
+    return 0;
+
   block_input ();
 
   /* For debugging, this gives a way to fake an I/O error.  */