]> git.eshelyaron.com Git - emacs.git/commit
Rewrite thread context switch code (bug#48990)
authorStefan Monnier <monnier@iro.umontreal.ca>
Sat, 12 Feb 2022 20:25:53 +0000 (15:25 -0500)
committerStefan Monnier <monnier@iro.umontreal.ca>
Sat, 12 Feb 2022 20:25:53 +0000 (15:25 -0500)
commitb8460fcb8c320ea6d7449f37f07502d10eb74cd5
tree49eed9555d20693eb01321881204dd9bc45176d1
parent89bb5a5f357e911aeb0b9f14e8b2f7c5a5fbabf7
Rewrite thread context switch code (bug#48990)

Make the context switch code handle buffer-local variables more
correctly by reusing the code originally written for `backtrace-eval`.
This has the side benefit of making the `saved_value` field unused.

* src/lisp.h (enum specbind_tag): Remove `saved_value` field.
(rebind_for_thread_switch, unbind_for_thread_switch): Delete decls.
(specpdl_unrewind): Declare function.

* src/eval.c (specpdl_saved_value): Delete function.
(specbind): Delete the code related to `saved_value`, and consolidate
common code between the different branches.
(rebind_for_thread_switch, -unbind_for_thread_switch): Move to `thread.c`.
(specpdl_unrewind): New function, extracted from `backtrace_eval_unrewind`.
Use `SET_INTERNAL_THREAD_SWITCH`.  Skip the buffer & excursion unwinds
depending on new arg `vars_only`.
(backtrace_eval_unrewind): Use it.
(mark_specpdl): Don't mark `saved_value`.

* src/thread.c (rebind_for_thread_switch, unbind_for_thread_switch):
Move from `eval.c` and rewrite using `specpdl_unrewind`.

* test/src/thread-tests.el (threads-test-bug48990): New test.

* test/Makefile.in (test_template): Add a + as suggested by make:
"warning: jobserver unavailable: using -j1.  Add '+' to parent make rule".
src/eval.c
src/lisp.h
src/thread.c
test/Makefile.in
test/src/thread-tests.el