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:
parent
037970f1af
commit
f90a3360d8
1 changed files with 20 additions and 0 deletions
|
@ -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
|
||||||
|
|
Loading…
Add table
Reference in a new issue