emacs-diffs
[Top][All Lists]
Advanced

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

master 4ac4cec652f: Prevent freezes on macOS (bug#69561)


From: Gerd Moellmann
Subject: master 4ac4cec652f: Prevent freezes on macOS (bug#69561)
Date: Wed, 13 Mar 2024 02:10:53 -0400 (EDT)

branch: master
commit 4ac4cec652ffaca4333d8f297b8a6c0e5bd79c68
Author: Gerd Möllmann <gerd@gnu.org>
Commit: Gerd Möllmann <gerd@gnu.org>

    Prevent freezes on macOS (bug#69561)
    
    * src/nsterm.m (ns_select_1): Store pending input_events. Always call
    [NSApp run].
---
 src/nsterm.m | 17 ++++++++++-------
 1 file changed, 10 insertions(+), 7 deletions(-)

diff --git a/src/nsterm.m b/src/nsterm.m
index f094b145fe3..f161edc4ac2 100644
--- a/src/nsterm.m
+++ b/src/nsterm.m
@@ -4739,12 +4739,15 @@ ns_select_1 (int nfds, fd_set *readfds, fd_set 
*writefds,
   check_native_fs ();
 #endif
 
-  if (hold_event_q.nr > 0 && !run_loop_only)
+  /* If there are input events pending, store them so that Emacs can
+     recognize C-g.  (And we must make sure [NSApp run] is called in
+     this function, so that C-g has a chance to land in
+     hold_event_q.)  */
+  if (hold_event_q.nr > 0)
     {
-      /* We already have events pending.  */
-      raise (SIGIO);
-      errno = EINTR;
-      return -1;
+      for (int i = 0; i < hold_event_q.nr; ++i)
+        kbd_buffer_store_event_hold (&hold_event_q.q[i], NULL);
+      hold_event_q.nr = 0;
     }
 
   eassert (nfds <= FD_SETSIZE);
@@ -4757,8 +4760,8 @@ ns_select_1 (int nfds, fd_set *readfds, fd_set *writefds,
   if (NSApp == nil
       || ![NSThread isMainThread]
       || (timeout && timeout->tv_sec == 0 && timeout->tv_nsec == 0))
-    return thread_select (pselect, nfds, readfds, writefds,
-                         exceptfds, timeout, sigmask);
+    thread_select (pselect, nfds, readfds, writefds,
+                  exceptfds, timeout, sigmask);
   else
     {
       struct timespec t = {0, 0};



reply via email to

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