emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master 07127e9c29: Fix error trapping in x_set_mouse_color


From: Po Lu
Subject: master 07127e9c29: Fix error trapping in x_set_mouse_color
Date: Sat, 19 Nov 2022 05:47:39 -0500 (EST)

branch: master
commit 07127e9c29a7d467f951f2ff939aae62ad744302
Author: Po Lu <luangruo@yahoo.com>
Commit: Po Lu <luangruo@yahoo.com>

    Fix error trapping in x_set_mouse_color
    
    * 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 | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/src/xfns.c b/src/xfns.c
index 2ff70f7985..95092ce05f 100644
--- a/src/xfns.c
+++ b/src/xfns.c
@@ -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)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]