Fix point motion in cloned buffers
commita416e1d6c111527205f3583c8d201bf95af6fa20
authorEli Zaretskii <eliz@gnu.org>
Mon, 12 Dec 2016 16:03:40 +0000 (12 18:03 +0200)
committerEli Zaretskii <eliz@gnu.org>
Mon, 12 Dec 2016 16:03:40 +0000 (12 18:03 +0200)
tree60e58859632f072952f84dee959eb0a88f3c097a
parent00d4ba2794243763b818c013669e36c1d2c7de62
Fix point motion in cloned buffers

* src/thread.c (post_acquire_global_lock): Call
set_buffer_internal_2 instead of tricking set_buffer_internal_1
into resetting the current buffer even if it didn't change.  This
avoids bug#25165, caused by failing to record the modified values
of point and mark, because current_buffer was set to NULL.  Also,
don't bother re-setting the buffer if there was no thread switch,
as that just wastes cycles.
* src/buffer.c (set_buffer_internal_2): New function, with most of
the body of set_buffer_internal_1, but without the test for B
being identical to the current buffer.
(set_buffer_internal_1): Call set_buffer_internal_2 if B is not
identical to the current buffer.
* src/buffer.h (set_buffer_internal_2): Add prototype.

* test/src/thread-tests.el (thread-sticky-point): New test.
src/buffer.c
src/buffer.h
src/thread.c
test/src/thread-tests.el