GNU bug report logs -
#71525
30.0.50; Spin in delete-region/interval_deletion_adjustment
Previous Next
Reported by: Steven Allen <steven <at> stebalien.com>
Date: Wed, 12 Jun 2024 19:22:01 UTC
Severity: normal
Found in version 30.0.50
Done: Eli Zaretskii <eliz <at> gnu.org>
Bug is archived. No further changes may be made.
Full log
Message #38 received at 71525 <at> debbugs.gnu.org (full text, mbox):
On 13/06/2024 19:31, Eli Zaretskii wrote:
>> From: Steven Allen<steven <at> stebalien.com>
>> Cc:71525 <at> debbugs.gnu.org
>> Date: Thu, 13 Jun 2024 09:06:07 -0700
>>
>>
>> Steven Allen<steven <at> stebalien.com> writes:
>>> Eli Zaretskii<eliz <at> gnu.org> writes:
>>>> I see a couple of Eshell-related changes, but no obvious suspects.
>>>>
>>>> Can someone please reproduce this and post a detailed backtrace,
>>>> including Lisp backtrace? Jim, are you looking into this?
>>> It's hanging in the C code, not lisp. I believe the issue is:
>>>
>>> https://lists.gnu.org/archive/html/emacs-devel/2024-06/msg00241.html
>>>
>>> So I'm trying that patch now.
>>>
>>> If that doesn't work, I'll produce a backtrace sometime later today.
>> I can confirm that the linked patch fixes the issue. Would you still
>> like me to produce a backtrace?
> No need, thanks. That issue is already on someone's table.
I think I see it now.
The thing is, decode_coding_c_string already calls
adjust_markers_for_insert through
decode_coding_object->decode_coding->produce_chars->insert_from_gap
And the extra call moves the markers too far.
Unfortunately, it's called with BEFORE_MARKERS=nil, and the above call
chain makes it difficult to pass through the extra argument.
Perhaps we should do this?
diff --git a/src/process.c b/src/process.c
index eb526311c53..3c6cbe9b188 100644
--- a/src/process.c
+++ b/src/process.c
@@ -6423,9 +6423,17 @@ read_and_insert_process_output (struct
Lisp_Process *p, char *buf,
specbind (Qinhibit_modification_hooks, Qt);
decode_coding_c_string (process_coding,
(unsigned char *) buf, nread, curbuf);
- adjust_markers_for_insert (PT, PT_BYTE,
- PT + process_coding->produced_char,
- PT_BYTE + process_coding->produced, true);
+ /* The previous call adjusts the markers, except for those
+ exactly at PT (it inserts with BEFORE_MARKERS=nil). */
+ struct Lisp_Marker *m;
+ for (m = BUF_MARKERS (current_buffer); m; m = m->next)
+ {
+ if (m->bytepos == PT_BYTE)
+ {
+ m->bytepos = PT_BYTE + process_coding->produced;
+ m->charpos = PT + process_coding->produced_char;
+ }
+ }
unbind_to (count1, Qnil);
read_process_output_set_last_coding_system (p, process_coding);
That doesn't adjust the overlays, however (the
adjust_overlays_for_insert call inside adjust_markers_for_insert). And
doing the same trick with them seems more difficult.
This bug report was last modified 1 year and 33 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.