]> git.eshelyaron.com Git - emacs.git/commit
Avoid crashes on C-g when several threads wait for input
authorEli Zaretskii <eliz@gnu.org>
Wed, 4 Oct 2017 07:27:49 +0000 (10:27 +0300)
committerEli Zaretskii <eliz@gnu.org>
Wed, 4 Oct 2017 07:27:49 +0000 (10:27 +0300)
commitea39d470bf35e45f1d8e39795f06ac74b3c37fc7
tree406dbe320ffd5c9e2a31fd1b8568e119e50e9279
parentfdbaebde08f4e53e3fc06fae99398c68a4e285fb
Avoid crashes on C-g when several threads wait for input

* src/thread.h (m_getcjmp): New member of 'struct thread_state'.
(getcjmp): Define to current thread's 'm_getcjmp'.
* src/thread.c (maybe_reacquire_global_lock): Switch to main
thread, since this is called from a SIGINT handler, which always
runs in the context of the main thread.
* src/lisp.h (sys_jmp_buf, sys_setjmp, sys_longjmp): Move the
definitions before thread.h is included, as thread.h now uses
sys_jmp_buf.
* src/keyboard.c (getcjmp): Remove declaration.
(read_char): Don't call maybe_reacquire_global_lock here.
(handle_interrupt): Call maybe_reacquire_global_lock here, if
invoked from the SIGINT handler, to make sure
quit_throw_to_read_char runs with main thread's Lisp bindings and
uses the main thread's jmp_buf buffer.  (Bug#28630)
src/keyboard.c
src/lisp.h
src/thread.c
src/thread.h