]> git.eshelyaron.com Git - emacs.git/commitdiff
Prevent a segfault when deleting a fullscreen frame on NextStep.
authorKai Ma <justksqsf@gmail.com>
Sat, 3 Dec 2022 10:17:26 +0000 (18:17 +0800)
committerEli Zaretskii <eliz@gnu.org>
Sun, 4 Dec 2022 12:50:04 +0000 (14:50 +0200)
* nsterm.m ([EmacsView resetCursorRects:]): Be defensive when
accessing FRAME_OUTPUT_DATA.  [resetCursorRects:] can be called
from the event loop after the frame is deleted.  When this
happens, emacsframe is NULL.  This means there is an underlying
leak of the EmacsView object!  (Bug#59794)
Do not merge to master.

Copyright-paperwork-exempt: yes

src/nsterm.m

index 507f2a9e7da3beddc2bc0788dbf40c0fe27d1c74..c09f743ec7f55bd535716f4ef4a7c832ad70b0fe 100644 (file)
@@ -6703,8 +6703,16 @@ ns_create_font_panel_buttons (id target, SEL select, SEL cancel_action)
 
 - (void)resetCursorRects
 {
-  NSRect visible = [self visibleRect];
-  NSCursor *currentCursor = FRAME_POINTER_TYPE (emacsframe);
+  NSRect visible;
+  NSCursor *currentCursor;
+
+  /* On macOS 13, [resetCursorRects:] could be called even after the
+     window is closed. */
+  if (! emacsframe || ! FRAME_OUTPUT_DATA (emacsframe))
+    return;
+
+  visible = [self visibleRect];
+  currentCursor = FRAME_POINTER_TYPE (emacsframe);
   NSTRACE ("[EmacsView resetCursorRects]");
 
   if (currentCursor == nil)