USE subprocess.Popen API correctly.

When collecting stdout/stderr *and* feeding data into a Popen instance,
communicate() must be used to avoid a known deadlocking scenario
when data sizes cross PIPE_BUF (which can be as small as 512, although should
be much larger in practice on linux).
pull/4295/head
Brian Harring 11 years ago
parent 7ecb2b6728
commit 2174230315

@ -935,10 +935,9 @@ class AnsibleModule(object):
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
if data:
cmd.stdin.write(data)
if not binary_data:
cmd.stdin.write('\\n')
out, err = cmd.communicate()
data += '\\n'
out, err = cmd.communicate(input=data)
rc = cmd.returncode
except (OSError, IOError), e:
self.fail_json(rc=e.errno, msg=str(e), cmd=args)

Loading…
Cancel
Save