]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix error trapping in x_set_mouse_color
authorPo Lu <luangruo@yahoo.com>
Sat, 19 Nov 2022 10:46:07 +0000 (18:46 +0800)
committerPo Lu <luangruo@yahoo.com>
Sat, 19 Nov 2022 10:47:28 +0000 (18:47 +0800)
* src/xfns.c (x_set_mouse_color): Use
x_uncatch_errors_after_check right after x_had_errors_p.  Then,
trap errors around FreeCursor requests, since some of the IDs
may not name valid cursors.

src/xfns.c

index 2ff70f79851ce5108e4a542bcd246999e72457ee..95092ce05f479151d2bafb805150118da3e402dd 100644 (file)
@@ -1362,13 +1362,21 @@ x_set_mouse_color (struct frame *f, Lisp_Object arg, Lisp_Object oldval)
       char *xmessage = alloca (1 + message_length);
       memcpy (xmessage, cursor_data.error_string, message_length);
 
-      x_uncatch_errors ();
+      x_uncatch_errors_after_check ();
+
+      /* XFreeCursor can generate BadCursor errors, because
+        XCreateFontCursor is not a request that waits for a reply,
+        and as such can return IDs that will not actually be used by
+        the server.  */
+      x_ignore_errors_for_next_request (FRAME_DISPLAY_INFO (f));
 
       /* Free any successfully created cursors.  */
       for (i = 0; i < mouse_cursor_max; i++)
        if (cursor_data.cursor[i] != 0)
          XFreeCursor (dpy, cursor_data.cursor[i]);
 
+      x_stop_ignoring_errors (FRAME_DISPLAY_INFO (f));
+
       /* This should only be able to fail if the server's serial
         number tracking is broken.  */
       if (cursor_data.error_cursor >= 0)