Hello Noam, I'm sorry for the late reply. I have been having some problems with the power source of my computer as of lately. Everything seems to be doing fine now though, so I'll get back to this. I made a very simple program that just prints a bunch of stuff to stdout and stderr: If I run it without your patches, it works surprisingly just fine (I noticed the original errors pop up most commonly on Slack I guess because it prints a lot more?), whereas if I evaluate said patches, this is the output of the trace buffer: |====================================================================== 1 -> (comint-output-filter # "stdout: hello, world Im gonna print some stuff 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 stderr: AHHHH PANIC CATASTROPHIC FAILIURE!!! The quick brown fox jumps over the lazy dog. ")(:comint-pmark nil) | 2 -> (set-marker # 1)(:comint-pmark nil) | 2 <- set-marker: #(:comint-pmark (# . #)) | 2 -> (set-marker # 191)(:comint-pmark (# . #)) | 2 <- set-marker: #(:comint-pmark (# . #)) | 2 -> (ansi-color-process-output "stdout: hello, world Im gonna print some stuff 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 stderr: AHHHH PANIC CATASTROPHIC FAILIURE!!! The quick brown fox jumps over the lazy dog. ")(:comint-pmark (# . #)) | 2 <- ansi-color-process-output: nil(:comint-pmark (# . #)) | 2 -> (comint-adjust-window-point # #)(:comint-pmark (# . #)) | 2 <- comint-adjust-window-point: nil(:comint-pmark (# . #)) | 2 -> (set-marker # 191)(:comint-pmark (# . #)) | 2 <- set-marker: #(:comint-pmark (# . #)) 1 <- comint-output-filter: #(:comint-pmark nil) | I am not sure what does this mean, perhaps it is some special character Slack uses for logging that messes with those markers, I don't know. Maybe I could try printing all of the ASCII characters sequentially and see what happens. Regardless, I'm still not entirely sure what your code is doing anyway. Thanks, Jacob PS: I don't know if I might have accidentally sent the message halfway writing it; if you see anything weird in another message, that might be the reason why. On 21/04/2020 04:29, Noam Postavsky wrote: > Jacob Lagares Pozo writes: > >> I should probably make a simple program that prints a bunch of stuff >> and then hangs, so I can have predictable and reproducible output, >> that might help. > It occurs to me that you should see a "non-local exit" in the trace when > the error triggers, and the traces just before that should hopefully > show the swapping of marker positions occuring. > >> So what do you exactly mean by that the process is ending normally? > Oh, hmm, I was still a bit confused. I thought the (:comint-pmark nil) > meant the marker was deleted, but actually it's just because around the > call to comint-output-filter a different buffer is current (which makes > the check in the tracing function fail). Maybe one more tweak to the > tracing function: > > (defun bug-40323-get-comint-output-marker () > (list :comint-pmark > (let ((buf (and (markerp comint-last-output-start) > (marker-buffer comint-last-output-start)))) > (when (buffer-live-p buf) > (cons > comint-last-output-start > (process-mark (get-buffer-process buf)))))))