Backport doc improvement in ELisp manual
authorEli Zaretskii <eliz@gnu.org>
Sat, 20 Apr 2019 07:21:02 +0000 (10:21 +0300)
committerEli Zaretskii <eliz@gnu.org>
Sat, 20 Apr 2019 07:21:02 +0000 (10:21 +0300)
* doc/lispref/processes.texi (Accepting Output): Backport:
document how do avoid race conditions while waiting for all of
the process's output to arrive.

doc/lispref/processes.texi

index d2ab518e5eb62c30ad4dff57e786a6613c5b6294..7331eb63762c525d0175327122c8c311c63a4450 100644 (file)
@@ -1834,6 +1834,26 @@ corresponding connection contains buffered data.  The function returns
 arrived.
 @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
 @subsection Processes and Threads
 @cindex processes, threads