xenapi plugins: Make sure subprocesses finish executing
Fixes bug 1286187 Neither execute_get_output() nor execute() would wait for the process to fully finish executing. This could potentially create a race condition where commands execute in a different order than intended. Also, for execute() it could cause a process to never finish executing if it generates enough output to block writing to the pipe. Change-Id: I3404f4b3ca1cddeec2f3e7b393817a6ccc42bec7
This commit is contained in:
parent
f35c63df24
commit
27c8086028
@ -26,13 +26,13 @@ def execute_get_output(*command):
|
||||
proc = subprocess.Popen(command, close_fds=True,
|
||||
stdout=subprocess.PIPE, stderr=devnull)
|
||||
devnull.close()
|
||||
return proc.stdout.read().strip()
|
||||
stdout = proc.communicate()[0]
|
||||
return stdout.strip()
|
||||
|
||||
|
||||
def execute(*command):
|
||||
"""Execute without returning stdout."""
|
||||
devnull = open(os.devnull, 'w')
|
||||
command = map(str, command)
|
||||
proc = subprocess.Popen(command, close_fds=True,
|
||||
stdout=subprocess.PIPE, stderr=devnull)
|
||||
subprocess.call(command, close_fds=True, stdout=devnull, stderr=devnull)
|
||||
devnull.close()
|
||||
|
Loading…
Reference in New Issue
Block a user