• Matthias Dahl's avatar
    Fix wait_reading_process_output wait_proc hang · de69d284
    Matthias Dahl authored
    * src/process.c (read_process_output): Track bytes read from
    a process.
    (wait_reading_process_output): If called recursively through
    timers and/or process filters via accept-process-output, it is
    possible that the output of wait_proc has already been read by
    one of those recursive calls, leaving the original call hanging
    forever if no further output arrives through that fd and no
    timeout has been set.  Fix that by using the process read
    accounting to keep track of how many bytes have been read and
    use that as a condition to break out of the infinite loop and
    return to the caller as well as to calculate the proper return
    value (if a wait_proc is given that is).
    
    * src/process.h (struct Lisp_Process): Add nbytes_read to track
    bytes read from a process.
    
    (cherry picked from commit 4ba32858)
    de69d284
process.c 241 KB