From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.ciao.gmane.io!not-for-mail From: Jacob Lagares Pozo Newsgroups: gmane.emacs.bugs Subject: bug#40323: 28.0.50; error in process filter: Invalid search bound (wrong side of point) Date: Tue, 5 May 2020 14:01:08 +0200 Message-ID: <74ba6b62-4a0c-d7bf-13fd-a11e4b70b762@iebesalu.cat> References: <35ec6e03-5df2-3b35-9076-3421d7a3f2c9@iebesalu.cat> <87bloci0yw.fsf@gmail.com> <87v9m132pj.fsf@gmail.com> <9861d97d-9e7e-5ac8-bd71-f52caad92024@iebesalu.cat> <87ftd22uz1.fsf@gmail.com> <73b0b37b-2ae9-f9c0-c673-4eaafe4ea61a@iebesalu.cat> <864ktf8wgm.fsf@gmail.com> <86wo697eql.fsf@gmail.com> Mime-Version: 1.0 Content-Type: multipart/alternative; boundary="------------966C2F41CC583329FECF30F6" Injection-Info: ciao.gmane.io; posting-host="ciao.gmane.io:159.69.161.202"; logging-data="82224"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.7.0 Cc: 40323@debbugs.gnu.org To: Noam Postavsky Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Tue May 05 14:36:15 2020 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1jVwny-000LCf-Gu for geb-bug-gnu-emacs@m.gmane-mx.org; Tue, 05 May 2020 14:36:10 +0200 Original-Received: from localhost ([::1]:59010 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jVwnx-0005W8-Gz for geb-bug-gnu-emacs@m.gmane-mx.org; Tue, 05 May 2020 08:36:09 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:60996) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jVwnq-0005Vu-3u for bug-gnu-emacs@gnu.org; Tue, 05 May 2020 08:36:02 -0400 Original-Received: from debbugs.gnu.org ([209.51.188.43]:51670) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jVwnp-0000Hh-Qm for bug-gnu-emacs@gnu.org; Tue, 05 May 2020 08:36:01 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1jVwnp-0005Fd-Oy for bug-gnu-emacs@gnu.org; Tue, 05 May 2020 08:36:01 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Jacob Lagares Pozo Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Tue, 05 May 2020 12:36:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 40323 X-GNU-PR-Package: emacs Original-Received: via spool by 40323-submit@debbugs.gnu.org id=B40323.158868213020144 (code B ref 40323); Tue, 05 May 2020 12:36:01 +0000 Original-Received: (at 40323) by debbugs.gnu.org; 5 May 2020 12:35:30 +0000 Original-Received: from localhost ([127.0.0.1]:34980 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jVwnJ-0005Eo-9X for submit@debbugs.gnu.org; Tue, 05 May 2020 08:35:30 -0400 Original-Received: from mail-wm1-f45.google.com ([209.85.128.45]:54384) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jVwGE-0004KY-CE for 40323@debbugs.gnu.org; Tue, 05 May 2020 08:01:19 -0400 Original-Received: by mail-wm1-f45.google.com with SMTP id h4so1979978wmb.4 for <40323@debbugs.gnu.org>; Tue, 05 May 2020 05:01:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iebesalu-cat.20150623.gappssmtp.com; s=20150623; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language; bh=78tzt3YacBy3CRfmz+/IAOxLQtwiuVxjMYxQhgrIS2s=; b=y+c5KotQtBQZV8u6tJtOYQAuPcXXO3fhlyazP9qd7i9I0UwPDDxTsTl6u24sDlRSB7 lVKGRU7JRsw4ChNyCREp5HVrH7XQupIqphMc/7JHy4N1AVuVyKCZoCamWn2f7a5QItnj Cd/XS25Dh7lKkGpI2CyL/8dcztld+WSZcAsAblUFUxQwkcijnJaMCNlHg4llEfNOZCh6 hWZ1nolrYB1KD9zVvRMQLhqTS6MBjBv2IHKtOLsSdEw/bc7dcrf7fcezixW/iuTk64Sy U2xNejd5jRuiVh3Mkw95aM0lKhv4uf5+FXhnkxKfoNbf09UNJn1bLD5cG4ml8OF50Ggk gAzg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language; bh=78tzt3YacBy3CRfmz+/IAOxLQtwiuVxjMYxQhgrIS2s=; b=dhWxU1yIF5efzD1cBHmGHA0QQFjVccOSFqMhn507tCbdB71b9YDr5sARVGNK9cPmcj pKRsSMBm0bydf9ZLqhyb6HBZlExP55vykPGKDyxksBnbkkfv55rKVJVyB4ediLP2z3ku inJS3wSLe68I3IcpBXR5LcA5YomSx1mR9ANbuXHlE8We4ALcsRORM0KWlecrLJ1VovFb 4Li7k4PNV0OOwSpspVYGQdUcFzw88939YSJSUdAI1LgQjncZKHGvkY0aJvV3aGaRL1EQ aPQWb7AMe6bgrX8mF/otkIp4X3mFx4i7F5fi0FZYjgcZ/nxs/YkKW6MqThQHaY6zkKBz 0PSQ== X-Gm-Message-State: AGi0PuaUr2P2GNQEXTue0UDhpR92dW+RcP3aNRXURkpoBwNTg0cjL8Ly mhnsv0LxgQMErqpuX9tRKeTjiKqnULU= X-Google-Smtp-Source: APiQypL0/qCrRnNxT/FNjCNdrR+jDQ4J+NhdF+M3SzRH8M+1JocnPOhiypJILq/VTD2laugooruVKw== X-Received: by 2002:a7b:c417:: with SMTP id k23mr3247821wmi.147.1588680070737; Tue, 05 May 2020 05:01:10 -0700 (PDT) Original-Received: from [192.168.100.54] ([185.154.11.80]) by smtp.gmail.com with ESMTPSA id k5sm3016442wrx.16.2020.05.05.05.01.09 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 05 May 2020 05:01:10 -0700 (PDT) In-Reply-To: <86wo697eql.fsf@gmail.com> Content-Language: en-US X-Mailman-Approved-At: Tue, 05 May 2020 08:35:28 -0400 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.io gmane.emacs.bugs:179728 Archived-At: This is a multi-part message in MIME format. --------------966C2F41CC583329FECF30F6 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit 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))))))) --------------966C2F41CC583329FECF30F6 Content-Type: multipart/related; boundary="------------21D9DE30356D5338E573B895" --------------21D9DE30356D5338E573B895 Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: 7bit

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 #<process Shell> "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 #<marker in no buffer> 1)(:comint-pmark nil)
| 2 <- set-marker: #<marker at 1 in *Async Shell Command*>(:comint-pmark (#<marker at 1 in *Async Shell Command*> . #<marker at 1 in *Async Shell Command*>))
| 2 -> (set-marker #<marker at 1 in *Async Shell Command*> 191)(:comint-pmark (#<marker at 1 in *Async Shell Command*> . #<marker at 1 in *Async Shell Command*>))
| 2 <- set-marker: #<marker at 191 in *Async Shell Command*>(:comint-pmark (#<marker at 1 in *Async Shell Command*> . #<marker at 191 in *Async Shell Command*>))
| 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 (#<marker at 1 in *Async Shell Command*> . #<marker at 191 in *Async Shell Command*>))
| 2 <- ansi-color-process-output: nil(:comint-pmark (#<marker at 1 in *Async Shell Command*> . #<marker at 191 in *Async Shell Command*>))
| 2 -> (comint-adjust-window-point #<window 31 on *Async Shell Command*> #<process Shell>)(:comint-pmark (#<marker at 1 in *Async Shell Command*> . #<marker at 191 in *Async Shell Command*>))
| 2 <- comint-adjust-window-point: nil(:comint-pmark (#<marker at 1 in *Async Shell Command*> . #<marker at 191 in *Async Shell Command*>))
| 2 -> (set-marker #<marker (moves after insertion) at 191 in *Async Shell Command*> 191)(:comint-pmark (#<marker at 1 in *Async Shell Command*> . #<marker at 191 in *Async Shell Command*>))
| 2 <- set-marker: #<marker (moves after insertion) at 191 in *Async Shell Command*>(:comint-pmark (#<marker at 1 in *Async Shell Command*> . #<marker at 191 in *Async Shell Command*>))
1 <- comint-output-filter: #<marker (moves after insertion) at 191 in *Async Shell Command*>(: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 <jlagarespo@iebesalu.cat> 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)))))))
--------------21D9DE30356D5338E573B895 Content-Type: image/png; name="bbndlgkhocibkjda.png" Content-Transfer-Encoding: base64 Content-ID: Content-Disposition: inline; filename="bbndlgkhocibkjda.png" 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 --------------21D9DE30356D5338E573B895-- --------------966C2F41CC583329FECF30F6--