* Re: emacs | Pipeline #8399 has failed for master | ee0e259e
[not found] <5feaf98365b55_3f903d428113941@emba.gnu.org.mail>
@ 2020-12-29 15:50 ` Michael Albinus
2020-12-29 17:12 ` Robert Pluim
0 siblings, 1 reply; 14+ messages in thread
From: Michael Albinus @ 2020-12-29 15:50 UTC (permalink / raw)
To: Robert Pluim; +Cc: emacs-devel
Hi Robert,
process-tests.el fail regularly on emba.gnu.org. They timeout, see the
last link in this reply.
Maybe it is something similar to what you have fixed for hydra tests, a
while ago?
Could you have a look on this?
Thanks, and best regards, Michael.
> Your pipeline has failed.
>
> Project: emacs ( https://emba.gnu.org/emacs/emacs )
> Branch: master ( https://emba.gnu.org/emacs/emacs/-/commits/master )
>
> Commit: ee0e259e ( https://emba.gnu.org/emacs/emacs/-/commit/ee0e259e5d52749999be329afa9c764a8aff0531 )
> Commit Message: Add some tests for align.el
>
> Commit Author: Lars Ingebrigtsen
>
> Pipeline #8399 ( https://emba.gnu.org/emacs/emacs/-/pipelines/8399 ) triggered by EMBA bot ( https://emba.gnu.org/bot )
> had 1 failed build.
>
> Job #9616 ( https://emba.gnu.org/emacs/emacs/-/jobs/9616/raw )
>
> Stage: test
> Name: test-all
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: emacs | Pipeline #8399 has failed for master | ee0e259e
2020-12-29 15:50 ` emacs | Pipeline #8399 has failed for master | ee0e259e Michael Albinus
@ 2020-12-29 17:12 ` Robert Pluim
2020-12-29 17:42 ` Michael Albinus
0 siblings, 1 reply; 14+ messages in thread
From: Robert Pluim @ 2020-12-29 17:12 UTC (permalink / raw)
To: Michael Albinus; +Cc: emacs-devel
Michael Albinus <michael.albinus@gmx.de> writes:
> Hi Robert,
>
> process-tests.el fail regularly on emba.gnu.org. They timeout, see the
> last link in this reply.
>
> Maybe it is something similar to what you have fixed for hydra tests, a
> while ago?
>
Youʼre thinking of changes for when thereʼs no network connection?
> Could you have a look on this?
>
Is there a way to get src/process-tests.log? That would at least
narrow it down.
Robert
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: emacs | Pipeline #8399 has failed for master | ee0e259e
2020-12-29 17:12 ` Robert Pluim
@ 2020-12-29 17:42 ` Michael Albinus
2020-12-29 21:23 ` Michael Albinus
0 siblings, 1 reply; 14+ messages in thread
From: Michael Albinus @ 2020-12-29 17:42 UTC (permalink / raw)
To: Robert Pluim; +Cc: emacs-devel
Robert Pluim <rpluim@gmail.com> writes:
Hi Robert,
> Is there a way to get src/process-tests.log? That would at least
> narrow it down.
No, the whole CI job runs into a timeout. I have wrapped now all tests
in process-tests.el with a timeout of 60 seconds; hopefully it shows us
the log file in case of.
> Robert
Best regards, Michael.
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: emacs | Pipeline #8399 has failed for master | ee0e259e
2020-12-29 17:42 ` Michael Albinus
@ 2020-12-29 21:23 ` Michael Albinus
2021-01-04 17:20 ` Robert Pluim
0 siblings, 1 reply; 14+ messages in thread
From: Michael Albinus @ 2020-12-29 21:23 UTC (permalink / raw)
To: Robert Pluim; +Cc: emacs-devel
Hi Robert,
>> Is there a way to get src/process-tests.log? That would at least
>> narrow it down.
>
> No, the whole CI job runs into a timeout. I have wrapped now all tests
> in process-tests.el with a timeout of 60 seconds; hopefully it shows us
> the log file in case of.
See <https://emba.gnu.org/emacs/emacs/-/jobs/9636/raw>.
process-test-sentinel-sit-for has produced a failure. And according to
the timestamps, process-test-stderr-buffer ran into the timeout.
>> Robert
Best regards, Michael.
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: emacs | Pipeline #8399 has failed for master | ee0e259e
2020-12-29 21:23 ` Michael Albinus
@ 2021-01-04 17:20 ` Robert Pluim
2021-01-04 20:38 ` Philipp Stephani
0 siblings, 1 reply; 14+ messages in thread
From: Robert Pluim @ 2021-01-04 17:20 UTC (permalink / raw)
To: Michael Albinus; +Cc: emacs-devel
Michael Albinus <michael.albinus@gmx.de> writes:
> Hi Robert,
>
>>> Is there a way to get src/process-tests.log? That would at least
>>> narrow it down.
>>
>> No, the whole CI job runs into a timeout. I have wrapped now all tests
>> in process-tests.el with a timeout of 60 seconds; hopefully it shows us
>> the log file in case of.
>
> See <https://emba.gnu.org/emacs/emacs/-/jobs/9636/raw>.
> process-test-sentinel-sit-for has produced a failure. And according to
> the timestamps, process-test-stderr-buffer ran into the timeout.
>
process-test-sentinel-wait-function-working-p which is used by
process-test-sentinel-sit-for looks racy. Just because the process
sentinel has been called is no guarantee that the process has exited
and had its process-status set correctly, perhaps it should loop on
'process-live-p'
The process-test-stderr-buffer timeout I can't explain: nothing there
can wait longer than 2 seconds (unless itʼs 'make-process' thatʼs
timing out?)
Robert
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: emacs | Pipeline #8399 has failed for master | ee0e259e
2021-01-04 17:20 ` Robert Pluim
@ 2021-01-04 20:38 ` Philipp Stephani
2021-01-05 7:52 ` Michael Albinus
2021-01-05 9:42 ` Robert Pluim
0 siblings, 2 replies; 14+ messages in thread
From: Philipp Stephani @ 2021-01-04 20:38 UTC (permalink / raw)
To: Emacs developers; +Cc: Michael Albinus
Am Mo., 4. Jan. 2021 um 18:21 Uhr schrieb Robert Pluim <rpluim@gmail.com>:
>
> Michael Albinus <michael.albinus@gmx.de> writes:
>
> > Hi Robert,
> >
> >>> Is there a way to get src/process-tests.log? That would at least
> >>> narrow it down.
> >>
> >> No, the whole CI job runs into a timeout. I have wrapped now all tests
> >> in process-tests.el with a timeout of 60 seconds; hopefully it shows us
> >> the log file in case of.
> >
> > See <https://emba.gnu.org/emacs/emacs/-/jobs/9636/raw>.
> > process-test-sentinel-sit-for has produced a failure. And according to
> > the timestamps, process-test-stderr-buffer ran into the timeout.
> >
>
> process-test-sentinel-wait-function-working-p which is used by
> process-test-sentinel-sit-for looks racy. Just because the process
> sentinel has been called is no guarantee that the process has exited
> and had its process-status set correctly, perhaps it should loop on
> 'process-live-p'
AFAIK the only correct way to wait for a process to exit is (while
(accept-process-output PROC)).
>
> The process-test-stderr-buffer timeout I can't explain: nothing there
> can wait longer than 2 seconds (unless itʼs 'make-process' thatʼs
> timing out?)
make-process can in theory deadlock on BSD-like systems due to a race
between setting the close-on-exec flag and other fork+exec
combinations. That's rather unlikely though.
But maybe there's a race between accept-process-output and calling the
sentinel so that the sentinel is called too early, and then
accept-process-output blocks? AFAIK, when splitting stderr and stdout,
one has to wait separately for the two involved processes:
(while (accept-process-output process))
(while (accept-process-output stderr-process))
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: emacs | Pipeline #8399 has failed for master | ee0e259e
2021-01-04 20:38 ` Philipp Stephani
@ 2021-01-05 7:52 ` Michael Albinus
2021-01-05 13:44 ` Philipp Stephani
2021-01-05 9:42 ` Robert Pluim
1 sibling, 1 reply; 14+ messages in thread
From: Michael Albinus @ 2021-01-05 7:52 UTC (permalink / raw)
To: Philipp Stephani; +Cc: Emacs developers
Philipp Stephani <p.stephani2@gmail.com> writes:
>> process-test-sentinel-wait-function-working-p which is used by
>> process-test-sentinel-sit-for looks racy. Just because the process
>> sentinel has been called is no guarantee that the process has exited
>> and had its process-status set correctly, perhaps it should loop on
>> 'process-live-p'
>
> AFAIK the only correct way to wait for a process to exit is (while
> (accept-process-output PROC)).
I vaguely remember that Stefan did propose (while (accept-process-output
PROC 0)).
Best regards, Michael.
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: emacs | Pipeline #8399 has failed for master | ee0e259e
2021-01-04 20:38 ` Philipp Stephani
2021-01-05 7:52 ` Michael Albinus
@ 2021-01-05 9:42 ` Robert Pluim
2021-01-05 9:55 ` Andreas Schwab
1 sibling, 1 reply; 14+ messages in thread
From: Robert Pluim @ 2021-01-05 9:42 UTC (permalink / raw)
To: Philipp Stephani; +Cc: Michael Albinus, Emacs developers
Philipp Stephani <p.stephani2@gmail.com> writes:
>> The process-test-stderr-buffer timeout I can't explain: nothing there
>> can wait longer than 2 seconds (unless itʼs 'make-process' thatʼs
>> timing out?)
>
> make-process can in theory deadlock on BSD-like systems due to a race
> between setting the close-on-exec flag and other fork+exec
> combinations. That's rather unlikely though.
> But maybe there's a race between accept-process-output and calling the
> sentinel so that the sentinel is called too early, and then
> accept-process-output blocks? AFAIK, when splitting stderr and stdout,
> one has to wait separately for the two involved processes:
> (while (accept-process-output process))
> (while (accept-process-output stderr-process))
The code is this:
(while (not (or sentinel-called
(> (- (float-time) start-time)
process-test-sentinel-wait-timeout)))
(accept-process-output))
You mean between checking 'sentinel-called' and
'accept-process-output', the sentinel is called, the process exit's and
then 'accept-process-output' hangs? I guess thatʼs possible. We could
add a timeout to accept-process-output to verify.
To your other point: thereʼs only one process involved here, stderr is
being sent to a separate buffer (although using a separate process is
possible as well).
Robert
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: emacs | Pipeline #8399 has failed for master | ee0e259e
2021-01-05 9:42 ` Robert Pluim
@ 2021-01-05 9:55 ` Andreas Schwab
0 siblings, 0 replies; 14+ messages in thread
From: Andreas Schwab @ 2021-01-05 9:55 UTC (permalink / raw)
To: emacs-devel
On Jan 05 2021, Robert Pluim wrote:
> The code is this:
>
> (while (not (or sentinel-called
> (> (- (float-time) start-time)
> process-test-sentinel-wait-timeout)))
> (accept-process-output))
>
> You mean between checking 'sentinel-called' and
> 'accept-process-output', the sentinel is called, the process exit's and
> then 'accept-process-output' hangs? I guess thatʼs possible.
No, that is not possible, as the process sentinel is only called while
inside accept-process-output.
Andreas.
--
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 7578 EB47 D4E5 4D69 2510 2552 DF73 E780 A9DA AEC1
"And now for something completely different."
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: emacs | Pipeline #8399 has failed for master | ee0e259e
2021-01-05 7:52 ` Michael Albinus
@ 2021-01-05 13:44 ` Philipp Stephani
2021-01-06 12:15 ` Michael Albinus
0 siblings, 1 reply; 14+ messages in thread
From: Philipp Stephani @ 2021-01-05 13:44 UTC (permalink / raw)
To: Michael Albinus; +Cc: Emacs developers
Am Di., 5. Jan. 2021 um 08:52 Uhr schrieb Michael Albinus
<michael.albinus@gmx.de>:
>
> Philipp Stephani <p.stephani2@gmail.com> writes:
>
> >> process-test-sentinel-wait-function-working-p which is used by
> >> process-test-sentinel-sit-for looks racy. Just because the process
> >> sentinel has been called is no guarantee that the process has exited
> >> and had its process-status set correctly, perhaps it should loop on
> >> 'process-live-p'
> >
> > AFAIK the only correct way to wait for a process to exit is (while
> > (accept-process-output PROC)).
>
> I vaguely remember that Stefan did propose (while (accept-process-output
> PROC 0)).
I guess that would work as well, but wouldn't it result in a busy
wait? OTOH, accept-process-output with an infinite timeout should
return immediately if the process has terminated (i.e. Emacs has
processed the SIGCHLD signal).
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: emacs | Pipeline #8399 has failed for master | ee0e259e
2021-01-05 13:44 ` Philipp Stephani
@ 2021-01-06 12:15 ` Michael Albinus
2021-01-17 10:37 ` Philipp Stephani
0 siblings, 1 reply; 14+ messages in thread
From: Michael Albinus @ 2021-01-06 12:15 UTC (permalink / raw)
To: Philipp Stephani; +Cc: Emacs developers
Philipp Stephani <p.stephani2@gmail.com> writes:
Hi Philipp,
>> >> process-test-sentinel-wait-function-working-p which is used by
>> >> process-test-sentinel-sit-for looks racy. Just because the process
>> >> sentinel has been called is no guarantee that the process has exited
>> >> and had its process-status set correctly, perhaps it should loop on
>> >> 'process-live-p'
>> >
>> > AFAIK the only correct way to wait for a process to exit is (while
>> > (accept-process-output PROC)).
>>
>> I vaguely remember that Stefan did propose (while (accept-process-output
>> PROC 0)).
>
> I guess that would work as well, but wouldn't it result in a busy
> wait?
No. If there's no output, or the connection is closed, it shall return nil.
Well, this is also true for (while (accept-process-output PROC)), but
this could block if the process just waits for something to happen.
Sure, the process shall exit in the given test situation. But we test
*whether* it happens, and shall be prepared that it fails.
(OTOH we have wrapped now the tests with a 60 second timeout; this might
be sufficient.)
Best regards, Michael.
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: emacs | Pipeline #8399 has failed for master | ee0e259e
2021-01-06 12:15 ` Michael Albinus
@ 2021-01-17 10:37 ` Philipp Stephani
2021-01-17 12:42 ` Michael Albinus
0 siblings, 1 reply; 14+ messages in thread
From: Philipp Stephani @ 2021-01-17 10:37 UTC (permalink / raw)
To: Michael Albinus; +Cc: Emacs developers
Am Mi., 6. Jan. 2021 um 13:15 Uhr schrieb Michael Albinus
<michael.albinus@gmx.de>:
>
> Philipp Stephani <p.stephani2@gmail.com> writes:
>
> Hi Philipp,
>
> >> >> process-test-sentinel-wait-function-working-p which is used by
> >> >> process-test-sentinel-sit-for looks racy. Just because the process
> >> >> sentinel has been called is no guarantee that the process has exited
> >> >> and had its process-status set correctly, perhaps it should loop on
> >> >> 'process-live-p'
> >> >
> >> > AFAIK the only correct way to wait for a process to exit is (while
> >> > (accept-process-output PROC)).
> >>
> >> I vaguely remember that Stefan did propose (while (accept-process-output
> >> PROC 0)).
> >
> > I guess that would work as well, but wouldn't it result in a busy
> > wait?
>
> No. If there's no output, or the connection is closed, it shall return nil.
> Well, this is also true for (while (accept-process-output PROC)), but
> this could block if the process just waits for something to happen.
You're right in that (while (accept-process-output PROC 0)) doesn't
result in a busy wait, yes. However, since accept-process-output
returns nil in that case, it wouldn't wait at all. But these tests
(e.g. process-tests-stderr-filter) are clearly intended to wait for
process exit; they even contain assertions that the process has
exited.
I'm still convinced that (while (accept-process-output PROC)) is the
only correct way to wait for PROC to finish (see the "Accepting
Output" Info node).
> (OTOH we have wrapped now the tests with a 60 second timeout; this might
> be sufficient.)
We should never hit a timeout in these cases. These test processes
should exit immediately and never hang. Any timeout indicates a bug
either in the tests or in Emacs itself.
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: emacs | Pipeline #8399 has failed for master | ee0e259e
2021-01-17 10:37 ` Philipp Stephani
@ 2021-01-17 12:42 ` Michael Albinus
2021-01-17 13:21 ` Philipp Stephani
0 siblings, 1 reply; 14+ messages in thread
From: Michael Albinus @ 2021-01-17 12:42 UTC (permalink / raw)
To: Philipp Stephani; +Cc: Emacs developers
Philipp Stephani <p.stephani2@gmail.com> writes:
Hi Philipp,
> You're right in that (while (accept-process-output PROC 0)) doesn't
> result in a busy wait, yes. However, since accept-process-output
> returns nil in that case, it wouldn't wait at all. But these tests
> (e.g. process-tests-stderr-filter) are clearly intended to wait for
> process exit; they even contain assertions that the process has
> exited.
> I'm still convinced that (while (accept-process-output PROC)) is the
> only correct way to wait for PROC to finish (see the "Accepting
> Output" Info node).
I believe, (while (accept-process-output PROC 0)) is the proper way to
read pending output from an exited process. That's all.
Best regards, Michael.
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: emacs | Pipeline #8399 has failed for master | ee0e259e
2021-01-17 12:42 ` Michael Albinus
@ 2021-01-17 13:21 ` Philipp Stephani
0 siblings, 0 replies; 14+ messages in thread
From: Philipp Stephani @ 2021-01-17 13:21 UTC (permalink / raw)
To: Michael Albinus; +Cc: Emacs developers
Am So., 17. Jan. 2021 um 13:42 Uhr schrieb Michael Albinus
<michael.albinus@gmx.de>:
>
> Philipp Stephani <p.stephani2@gmail.com> writes:
>
> Hi Philipp,
>
> > You're right in that (while (accept-process-output PROC 0)) doesn't
> > result in a busy wait, yes. However, since accept-process-output
> > returns nil in that case, it wouldn't wait at all. But these tests
> > (e.g. process-tests-stderr-filter) are clearly intended to wait for
> > process exit; they even contain assertions that the process has
> > exited.
> > I'm still convinced that (while (accept-process-output PROC)) is the
> > only correct way to wait for PROC to finish (see the "Accepting
> > Output" Info node).
>
> I believe, (while (accept-process-output PROC 0)) is the proper way to
> read pending output from an exited process. That's all.
Yeah, I think you're right. However, if we'd need to wait for the
process anyway, we'd need to evaluate
(while (process-live-p PROC) (accept-process-output))
(while (accept-process-output PROC 0))
and that's more complex and subtler than (while (accept-process-output PROC)).
There's another issue that I haven't had the chance to debug yet: If
you evaluate a form like
(let ((tot-calls 0))
(dotimes (i 100)
(let* ((calls 0)
(a (make-process :name "a"
:command (list "bash" "-c" "echo out &&
echo err >&2")
:stderr (generate-new-buffer "*stderr*")
:sentinel (lambda (_a _b) (cl-incf calls))
:noquery t)))
(while (accept-process-output a))
(cl-incf tot-calls calls)))
tot-calls)
then the result will often be significantly less than 100, and I think
Emacs should guarantee that it will be exactly 100 (i.e. that the
sentinel is guaranteed to be called once accept-process-output returns
nil).
^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2021-01-17 13:21 UTC | newest]
Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <5feaf98365b55_3f903d428113941@emba.gnu.org.mail>
2020-12-29 15:50 ` emacs | Pipeline #8399 has failed for master | ee0e259e Michael Albinus
2020-12-29 17:12 ` Robert Pluim
2020-12-29 17:42 ` Michael Albinus
2020-12-29 21:23 ` Michael Albinus
2021-01-04 17:20 ` Robert Pluim
2021-01-04 20:38 ` Philipp Stephani
2021-01-05 7:52 ` Michael Albinus
2021-01-05 13:44 ` Philipp Stephani
2021-01-06 12:15 ` Michael Albinus
2021-01-17 10:37 ` Philipp Stephani
2021-01-17 12:42 ` Michael Albinus
2021-01-17 13:21 ` Philipp Stephani
2021-01-05 9:42 ` Robert Pluim
2021-01-05 9:55 ` Andreas Schwab
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.