emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] master 0592cef: Fix hang with large yanks This should fix


From: Paul Eggert
Subject: [Emacs-diffs] master 0592cef: Fix hang with large yanks This should fix the bug fixed by Mike
Date: Fri, 17 Jul 2015 18:55:07 +0000

branch: master
commit 0592cefd03f1de2f04b721d07a16e6e0a9e48f73
Author: Paul Eggert <address@hidden>
Commit: Paul Eggert <address@hidden>

    Fix hang with large yanks This should fix the bug fixed by Mike
    
    Crowe's patch in:
    https://lists.gnu.org/archive/html/emacs-devel/2015-07/msg00106.html
    A problem in this area has been reported by several users; see
    Bug#16737, Bug#17101, Bug#17026, Bug#17172, Bug#19320, Bug#20283.
    This fix differs from Mike Crowe's patch in that it should avoid a
    race condition that could lose SIGIO signals.  ignore_sigio dates
    back to the 1980s when some platforms couldn't block signals, and
    could only ignore them, which led to races when signals arrived
    while being ignored.  We shouldn't have to worry about those old
    platforms now.
    * src/dispextern.h, src/sysdep.c (ignore_sigio): Remove.
    * src/emacs.c (shut_down_emacs):
    Don't call ignore_sigio; unrequest_sigio should suffice.
    * src/keyboard.c (kbd_buffer_store_buffered_event):
    Use unrequest_sigio, not ignore_sigio.
    (kbd_buffer_get_event):
    Call request_sigio when getting the ball rolling again.
---
 src/dispextern.h |    1 -
 src/emacs.c      |    1 -
 src/keyboard.c   |    4 ++--
 src/sysdep.c     |    8 --------
 4 files changed, 2 insertions(+), 12 deletions(-)

diff --git a/src/dispextern.h b/src/dispextern.h
index 5202142..37ebab0 100644
--- a/src/dispextern.h
+++ b/src/dispextern.h
@@ -3373,7 +3373,6 @@ void unrequest_sigio (void);
 bool tabs_safe_p (int);
 void init_baud_rate (int);
 void init_sigio (int);
-void ignore_sigio (void);
 
 /* Defined in xfaces.c.  */
 
diff --git a/src/emacs.c b/src/emacs.c
index aad9306..93fb587 100644
--- a/src/emacs.c
+++ b/src/emacs.c
@@ -2011,7 +2011,6 @@ shut_down_emacs (int sig, Lisp_Object stuff)
   /* There is a tendency for a SIGIO signal to arrive within exit,
      and cause a SIGHUP because the input descriptor is already closed.  */
   unrequest_sigio ();
-  ignore_sigio ();
 
   /* Do this only if terminating normally, we want glyph matrices
      etc. in a core dump.  */
diff --git a/src/keyboard.c b/src/keyboard.c
index c5a392f..6bd123c 100644
--- a/src/keyboard.c
+++ b/src/keyboard.c
@@ -3649,8 +3649,7 @@ kbd_buffer_store_buffered_event (union 
buffered_input_event *event,
           /* Don't read keyboard input until we have processed kbd_buffer.
              This happens when pasting text longer than KBD_BUFFER_SIZE/2.  */
           hold_keyboard_input ();
-          if (!noninteractive)
-            ignore_sigio ();
+          unrequest_sigio ();
           stop_polling ();
         }
 #endif /* subprocesses */
@@ -3849,6 +3848,7 @@ kbd_buffer_get_event (KBOARD **kbp,
       /* Start reading input again because we have processed enough to
          be able to accept new events again.  */
       unhold_keyboard_input ();
+      request_sigio ();
       start_polling ();
     }
 #endif /* subprocesses */
diff --git a/src/sysdep.c b/src/sysdep.c
index 30a55f1..df3e573 100644
--- a/src/sysdep.c
+++ b/src/sysdep.c
@@ -659,14 +659,6 @@ unrequest_sigio (void)
   interrupts_deferred = 1;
 #endif
 }
-
-void
-ignore_sigio (void)
-{
-#ifdef USABLE_SIGIO
-  signal (SIGIO, SIG_IGN);
-#endif
-}
 
 #ifndef MSDOS
 /* Block SIGCHLD.  */



reply via email to

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