| | Compare with | https://lists.gnu.org/archive/html/bug-gnu-emacs/2015-07/msg00287.html | | Based on git commit 4d7e6e51dd4acecff466a28d958c50f34fc130b8 From: Mike Crowe Subject: [PATCH] Re-enable SIGIO when waiting for events Date: Sat, 11 Jul 2015 12:58:00 +0100 Pasting a large string into an Emacs tty frame causes keyboard.c:kbd_buffer_store_buffered_event to call ignore_sigio() which sets SIGIO to SIG_IGN. Unfortunately no-one seems to ever re-enable the SIGIO handler. This leads to timeouts when attempting to paste into an Emacs X11 frame as reported at http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16737 . It appears that keyboard.c:kbd_buffer_get_event used to re-enable the signal handler but that was removed as part of a large signal-handling clean up in 4d7e6e51dd4acecff466a28d958c50f34fc130b8. Reinstating the re-enabling of SIGIO in kbd_buffer_get_event solves the problems reported in bug 16737 for me. * src/keyboard.c (kbd_buffer_get_event): Re-enable SIGIO when waiting for event. --- src/keyboard.c | 10 ++++++++++ 1 file changed, 10 insertions(+) --- src/keyboard.c +++ src/keyboard.c 2016-03-10 07:39:35.770752804 +0000 @@ -364,6 +364,8 @@ static ptrdiff_t echo_length (void); static Lisp_Object Qpolling_period; +static void deliver_input_available_signal (int sig); + /* Incremented whenever a timer is run. */ unsigned timers_run; @@ -3829,6 +3831,14 @@ 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 (); +#ifdef USABLE_SIGIO + if (!noninteractive) + { + struct sigaction action; + emacs_sigaction_init (&action, deliver_input_available_signal); + sigaction (SIGIO, &action, 0); + } +#endif start_polling (); } #endif /* subprocesses */