diff options
| author | Eli Zaretskii | 2016-12-12 18:03:40 +0200 |
|---|---|---|
| committer | Eli Zaretskii | 2016-12-12 18:03:40 +0200 |
| commit | a416e1d6c111527205f3583c8d201bf95af6fa20 (patch) | |
| tree | 60e58859632f072952f84dee959eb0a88f3c097a /test/src/thread-tests.el | |
| parent | 00d4ba2794243763b818c013669e36c1d2c7de62 (diff) | |
| download | emacs-a416e1d6c111527205f3583c8d201bf95af6fa20.tar.gz emacs-a416e1d6c111527205f3583c8d201bf95af6fa20.zip | |
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.
Diffstat (limited to 'test/src/thread-tests.el')
| -rw-r--r-- | test/src/thread-tests.el | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/test/src/thread-tests.el b/test/src/thread-tests.el index 4e7b052cba0..7261cda9fbb 100644 --- a/test/src/thread-tests.el +++ b/test/src/thread-tests.el | |||
| @@ -221,8 +221,18 @@ | |||
| 221 | :group 'widget-faces)) | 221 | :group 'widget-faces)) |
| 222 | 222 | ||
| 223 | (ert-deftest thread-errors () | 223 | (ert-deftest thread-errors () |
| 224 | "Test what happens when a thread signals an error." | 224 | "Test what happens when a thread signals an error." |
| 225 | (should (threadp (make-thread #'call-error "call-error"))) | 225 | (should (threadp (make-thread #'call-error "call-error"))) |
| 226 | (should (threadp (make-thread #'thread-custom "thread-custom")))) | 226 | (should (threadp (make-thread #'thread-custom "thread-custom")))) |
| 227 | 227 | ||
| 228 | (ert-deftest thread-sticky-point () | ||
| 229 | "Test bug #25165 with point movement in cloned buffer." | ||
| 230 | (with-temp-buffer | ||
| 231 | (insert "Lorem ipsum dolor sit amet, consectetur adipiscing elit.") | ||
| 232 | (goto-char (point-min)) | ||
| 233 | (clone-indirect-buffer nil nil) | ||
| 234 | (forward-char 20) | ||
| 235 | (sit-for 1) | ||
| 236 | (should (= (point) 21)))) | ||
| 237 | |||
| 228 | ;;; threads.el ends here | 238 | ;;; threads.el ends here |