Bladeren bron

Fix race condition in subprocess runner

stdin, stdout, and stderr being closed does not necessarily imply that the process has exited, although it usually does. Still need to explicitly wait for it to terminate after the I/O loop. This matches what the stdlib `subprocess.Popen._communicate` does as well.
tags/v1.0
JustAnotherArchivist 1 jaar geleden
bovenliggende
commit
adafd6bd01
1 gewijzigde bestanden met toevoegingen van 1 en 0 verwijderingen
  1. +1
    -0
      codearchiver/subprocess.py

+ 1
- 0
codearchiver/subprocess.py Bestand weergeven

@@ -66,6 +66,7 @@ def run_with_log(args, *, check = True, input = None, **kwargs):
stdout.append(data) stdout.append(data)
if stderrBuf: if stderrBuf:
_logger.info(stderrBuf.decode('utf-8')) _logger.info(stderrBuf.decode('utf-8'))
p.wait()
assert p.poll() is not None assert p.poll() is not None
if input is not None and stdinOffset < len(input): if input is not None and stdinOffset < len(input):
_logger.warning(f'Could not write all input to the stdin pipe (wanted to write {len(input)} bytes, only wrote {stdinOffset})') _logger.warning(f'Could not write all input to the stdin pipe (wanted to write {len(input)} bytes, only wrote {stdinOffset})')


Laden…
Annuleren
Opslaan