From: YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
To: Eli Zaretskii <eliz@gnu.org>
Cc: 28630@debbugs.gnu.org, tom@tromey.com, agrambot@gmail.com
Subject: bug#28630: 27.0.50; C-g while a non-main thread is sitting crashes Emacs
Date: Wed, 04 Oct 2017 16:39:27 +0900 [thread overview]
Message-ID: <wlk20bnyz4.wl%mituharu@math.s.chiba-u.ac.jp> (raw)
In-Reply-To: <838tgt352c.fsf@gnu.org>
>>>>> On Mon, 02 Oct 2017 19:08:59 +0300, Eli Zaretskii <eliz@gnu.org> said:
> I think the second thread calls setjmp and clobbers the values set
> by the main thread, when the main thread called setjmp. We need to
> eliminate this possibility of threads stepping on each other's toes.
Make the global variable `getcjmp' thread-local?
YAMAMOTO Mitsuharu
mituharu@math.s.chiba-u.ac.jp
diff --git a/src/keyboard.c b/src/keyboard.c
index e8701b8870..42d51a2ee8 100644
--- a/src/keyboard.c
+++ b/src/keyboard.c
@@ -145,10 +145,6 @@ static Lisp_Object recover_top_level_message;
/* Message normally displayed by Vtop_level. */
static Lisp_Object regular_top_level_message;
-/* For longjmp to where kbd input is being done. */
-
-static sys_jmp_buf getcjmp;
-
/* True while displaying for echoing. Delays C-g throwing. */
static bool echoing;
@@ -3325,13 +3321,13 @@ record_char (Lisp_Object c)
static void
save_getcjmp (sys_jmp_buf temp)
{
- memcpy (temp, getcjmp, sizeof getcjmp);
+ memcpy (temp, current_thread->getcjmp, sizeof current_thread->getcjmp);
}
static void
restore_getcjmp (sys_jmp_buf temp)
{
- memcpy (getcjmp, temp, sizeof getcjmp);
+ memcpy (current_thread->getcjmp, temp, sizeof current_thread->getcjmp);
}
\f
/* Low level keyboard/mouse input.
@@ -10534,7 +10530,7 @@ quit_throw_to_read_char (bool from_signal)
do_switch_frame (make_lispy_switch_frame (internal_last_event_frame),
0, 0, Qnil);
- sys_longjmp (getcjmp, 1);
+ sys_longjmp (current_thread->getcjmp, 1);
}
\f
DEFUN ("set-input-interrupt-mode", Fset_input_interrupt_mode,
diff --git a/src/lisp.h b/src/lisp.h
index 680c25d4c4..ed2423596e 100644
--- a/src/lisp.h
+++ b/src/lisp.h
@@ -1865,8 +1865,6 @@ verify (offsetof (struct Lisp_Sub_Char_Table, contents)
== (offsetof (struct Lisp_Vector, contents)
+ SUB_CHAR_TABLE_OFFSET * sizeof (Lisp_Object)));
-#include "thread.h"
-
/***********************************************************************
Symbols
***********************************************************************/
@@ -3096,6 +3094,8 @@ union specbinding
} bt;
};
+#include "thread.h"
+
/* These 3 are defined as macros in thread.h. */
/* extern union specbinding *specpdl; */
/* extern union specbinding *specpdl_ptr; */
diff --git a/src/thread.h b/src/thread.h
index 7fce8674f0..125ca23b55 100644
--- a/src/thread.h
+++ b/src/thread.h
@@ -177,6 +177,9 @@ struct thread_state
It must do so ASAP. */
int not_holding_lock;
+ /* For longjmp to where kbd input is being done. */
+ sys_jmp_buf getcjmp;
+
/* Threads are kept on a linked list. */
struct thread_state *next_thread;
};
next prev parent reply other threads:[~2017-10-04 7:39 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-09-28 7:22 bug#28630: 27.0.50; C-g while a non-main thread is sitting crashes Emacs Alex
2017-10-01 3:18 ` Alex
2017-10-01 15:01 ` Eli Zaretskii
2017-10-01 18:10 ` Alex
2017-10-01 18:32 ` Eli Zaretskii
2017-10-02 4:30 ` YAMAMOTO Mitsuharu
2017-10-02 12:43 ` YAMAMOTO Mitsuharu
2017-10-02 16:08 ` Eli Zaretskii
2017-10-04 7:39 ` Eli Zaretskii
2017-10-04 7:49 ` YAMAMOTO Mitsuharu
2017-10-04 8:16 ` Eli Zaretskii
2017-10-04 8:32 ` YAMAMOTO Mitsuharu
2017-10-04 9:23 ` Eli Zaretskii
2017-10-05 3:27 ` YAMAMOTO Mitsuharu
2017-10-05 7:24 ` Eli Zaretskii
2017-10-07 13:53 ` Philipp Stephani
2017-10-07 14:24 ` Eli Zaretskii
2017-10-07 14:50 ` Eli Zaretskii
2017-10-09 8:21 ` YAMAMOTO Mitsuharu
2017-10-09 8:38 ` Eli Zaretskii
2017-10-09 10:34 ` mituharu
2017-10-09 11:01 ` Eli Zaretskii
2017-10-04 7:39 ` YAMAMOTO Mitsuharu [this message]
2017-10-04 8:14 ` Eli Zaretskii
2017-10-02 5:11 ` Eric Abrahamsen
2017-10-02 15:54 ` Eli Zaretskii
2017-10-03 9:35 ` Dmitry Gutov
2017-10-03 14:38 ` Eli Zaretskii
2017-10-03 14:50 ` Philipp Stephani
2017-10-03 15:45 ` Eli Zaretskii
2017-10-03 16:22 ` Philipp Stephani
2017-10-03 16:35 ` Eli Zaretskii
2017-10-03 17:04 ` Philipp Stephani
2017-10-01 10:08 ` Alan Third
2017-10-01 15:03 ` Eli Zaretskii
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=wlk20bnyz4.wl%mituharu@math.s.chiba-u.ac.jp \
--to=mituharu@math.s.chiba-u.ac.jp \
--cc=28630@debbugs.gnu.org \
--cc=agrambot@gmail.com \
--cc=eliz@gnu.org \
--cc=tom@tromey.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.