GNU bug report logs - #66186
"make lisp/eshell/esh-proc-tests" fails intermittently since 7e50861ca7ed3f620fe62ac6572f6e88b3600ece

Previous Next

Package: emacs;

Reported by: Jens Schmidt <jschmidt4gnu <at> vodafonemail.de>

Date: Sun, 24 Sep 2023 21:37:02 UTC

Severity: normal

Fixed in version 30.1

Done: Jim Porter <jporterbugs <at> gmail.com>

Bug is archived. No further changes may be made.

Full log


View this message in rfc822 format

From: Jim Porter <jporterbugs <at> gmail.com>
To: Jens Schmidt <jschmidt4gnu <at> vodafonemail.de>, 66186 <at> debbugs.gnu.org
Subject: bug#66186: "make lisp/eshell/esh-proc-tests" fails intermittently since 7e50861ca7ed3f620fe62ac6572f6e88b3600ece
Date: Sun, 24 Sep 2023 16:02:03 -0700
On 9/24/2023 2:35 PM, Jens Schmidt via Bug reports for GNU Emacs, the 
Swiss army knife of text editors wrote:
> * Broken Pipe with gdb Stack Trace
> 
> [test]$ HOME=/nonexistent LANG=C EMACS_TEST_DIRECTORY=/home/jschmidt/work/emacs-master/test gdb -q -batch -ex run -ex backtrace --args "../src/emacs" --module-assertions --no-init-file --no-site-file --no-site-lisp -L ":."    -l ert  -l lisp/eshell/esh-proc-tests.el   --batch --eval '(ert-run-tests-batch-and-exit (quote (not (tag :unstable))))'
[snip]
>     passed   8/12  esh-proc-test/pipeline-connection-type/last2 (0.056252 sec)
> [Detaching after vfork from child process 7986]
> [Detaching after vfork from child process 7987]
> 
> Thread 1 "emacs" received signal SIGPIPE, Broken pipe.
> 0x00007ffff57bffef in write () from /lib/x86_64-linux-gnu/libpthread.so.0
> #0  0x00007ffff57bffef in write () at /lib/x86_64-linux-gnu/libpthread.so.0
> #1  0x00005555556f2f08 in emacs_full_write (fd=19, buf=0x5555565918b8 "hi", nbyte=2, interruptible=-1) at sysdep.c:2812
[snip]

Thanks. This looks like it's caused when Eshell runs a command something 
like this:

  echo hi | sh -c 'if [ -t 0 ]; then echo stdin; fi; ...'

(Note that the pipe above is handled entirely by Eshell, using 
'process-send-string' in this case.) I'm guessing that sometimes, the 
'sh' process has exited by the time Eshell calls '(process-send-string 
PROC "hi")'. Presumably, the commit you identified (which just changed 
some debug logging) altered the timings by just enough to trigger this 
race condition for you.

However, I don't understand why this would cause an abort though; 
normally, 'process-send-string' should just signal an Elisp error (which 
Eshell then catches and does the right thing with it). Maybe there's a 
bug somewhere in process.c where it's not correctly handling the (real) 
SIGPIPE signal and converting it to an Elisp signal?

I'm somewhat familiar with process.c, so I can take a look at this, but 
it'll probably be a week or two until I have time to really dig in. In 
the meantime, if anyone else wants to work on a fix, feel free.




This bug report was last modified 1 year and 293 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.