[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#33839: 26.1.90; Emacs occasionally fails to receive asynchronous sub
From: |
Philipp Stephani |
Subject: |
bug#33839: 26.1.90; Emacs occasionally fails to receive asynchronous subprocess output in batch mode |
Date: |
Tue, 25 Dec 2018 17:38:31 +0100 |
Am So., 23. Dez. 2018 um 17:45 Uhr schrieb Philipp Stephani
<p.stephani2@gmail.com>:
>
> Am So., 23. Dez. 2018 um 16:22 Uhr schrieb Eli Zaretskii <eliz@gnu.org>:
> >
> > > From: Philipp <p.stephani2@gmail.com>
> > > Date: Sun, 23 Dec 2018 03:28:53 +0100
> > >
> > > (with-temp-buffer
> > > (let ((proc (make-process :name "test"
> > > :command '("bash" "-c" "echo stdout; echo
> > > stderr >&2")
> > > :buffer (current-buffer)
> > > :connection-type 'pipe
> > > :sentinel #'ignore
> > > :noquery t
> > > :coding '(utf-8-unix . utf-8-unix))))
> > > (when (process-live-p proc)
> > > (process-send-eof proc))
> > > (while (process-live-p proc)
> > > (accept-process-output proc))
> > > (cl-assert (equal (buffer-string) "stdout\nstderr\n") :show-args)))
> > >
> > > Then evaluate this form repeatedly. Occasionally the buffer is empty
> > > and the assertion triggers.
> >
> > Isn't there an inherent race condition here?
>
> Maybe? If so, then it should be documented, with an explanation how to
> write this in a race-free manner. (It seems waiting for the process
> sentinel to run works reliably.)
This is also probably closely related to
https://debbugs.gnu.org/cgi/bugreport.cgi?bug=31214.
bug#33839: 26.1.90; Emacs occasionally fails to receive asynchronous subprocess output in batch mode, Paul Eggert, 2018/12/27