mirror of
https://github.com/samba-team/samba.git
synced 2024-12-23 17:34:34 +03:00
python: use communicate to fix Popen deadlock
`Popen.wait()` will deadlock when using stdout=PIPE and/or stderr=PIPE and the child process generates large output to a pipe such that it blocks waiting for the OS pipe buffer to accept more data. Use communicate() to avoid that. Signed-off-by: Joe Guo <joeg@catalyst.net.nz> Reviewed-by: Douglas Bagnall <douglas.bagnall@catalyst.net.nz> Reviewed-by: Andrew Bartlett <abartlet@samba.org> Autobuild-User(master): Andrew Bartlett <abartlet@samba.org> Autobuild-Date(master): Thu Oct 19 09:27:16 CEST 2017 on sn-devel-144
This commit is contained in:
parent
8ed3cac9e5
commit
5dc773a5b0
@ -326,20 +326,22 @@ class BlackboxTestCase(TestCaseInTempDir):
|
||||
stdout=subprocess.PIPE,
|
||||
stderr=subprocess.PIPE,
|
||||
shell=True)
|
||||
retcode = p.wait()
|
||||
stdoutdata, stderrdata = p.communicate()
|
||||
retcode = p.returncode
|
||||
if retcode != expected:
|
||||
raise BlackboxProcessError(retcode,
|
||||
line,
|
||||
p.stdout.read(),
|
||||
p.stderr.read())
|
||||
stdoutdata,
|
||||
stderrdata)
|
||||
|
||||
def check_output(self, line):
|
||||
line = self._make_cmdline(line)
|
||||
p = subprocess.Popen(line, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True, close_fds=True)
|
||||
retcode = p.wait()
|
||||
stdoutdata, stderrdata = p.communicate()
|
||||
retcode = p.returncode
|
||||
if retcode:
|
||||
raise BlackboxProcessError(retcode, line, p.stdout.read(), p.stderr.read())
|
||||
return p.stdout.read()
|
||||
raise BlackboxProcessError(retcode, line, stdoutdata, stderrdata)
|
||||
return stdoutdata
|
||||
|
||||
|
||||
def connect_samdb(samdb_url, lp=None, session_info=None, credentials=None,
|
||||
|
@ -1 +0,0 @@
|
||||
^samba.tests.blackbox.check_output
|
Loading…
Reference in New Issue
Block a user