Backport doc improvement in ELisp manual

* doc/lispref/processes.texi (Accepting Output): Backport:
document how do avoid race conditions while waiting for all of
the process's output to arrive.
This commit is contained in:
Eli Zaretskii 2019-04-20 10:21:02 +03:00
parent 037970f1af
commit f90a3360d8

View file

@ -1834,6 +1834,26 @@ corresponding connection contains buffered data. The function returns
arrived. arrived.
@end defun @end defun
If a connection from a process contains buffered data,
@code{accept-process-output} can return non-@code{nil} even after the
process has exited. Therefore, although the following loop:
@example
;; This loop contains a bug.
(while (process-live-p process)
(accept-process-output process))
@end example
@noindent
will often read all output from @var{process}, it has a race condition
and can miss some output if @code{process-live-p} returns @code{nil}
while the connection still contains data. Better is to write the loop
like this:
@example
(while (accept-process-output process))
@end example
@node Processes and Threads @node Processes and Threads
@subsection Processes and Threads @subsection Processes and Threads
@cindex processes, threads @cindex processes, threads