Uses a lock around Popens() to prevent a deadlock in Python.
Please see crbug.com/323843 for more details.
BUG=chromium:323843
TEST=Run the audiovideo_CRASFormatConversion on parrot
Change-Id: I12b9450c937acf74888ed995f25f405c4f15a705
Reviewed-on: https://chromium-review.googlesource.com/178373
Reviewed-by: Owen Lin <owenlin@chromium.org>
Tested-by: Owen Lin <owenlin@chromium.org>
Commit-Queue: Owen Lin <owenlin@chromium.org>
diff --git a/client/cros/audio/cmd_utils.py b/client/cros/audio/cmd_utils.py
index ca5858a..03c0c14 100644
--- a/client/cros/audio/cmd_utils.py
+++ b/client/cros/audio/cmd_utils.py
@@ -6,6 +6,9 @@
import logging
import pipes
import subprocess
+import threading
+
+_popen_lock = threading.Lock()
def wait_and_check_returncode(*popens):
@@ -40,7 +43,9 @@
'''Returns a Popen object just as subprocess.Popen does but with the
executed command stored in Popen.command.
'''
- ps = subprocess.Popen(*args, **kargs)
+ # The lock is required for http://crbug.com/323843.
+ with _popen_lock:
+ ps = subprocess.Popen(*args, **kargs)
the_args = args[0] if len(args) > 0 else kargs['args']
ps.command = ' '.join(pipes.quote(x) for x in the_args)
logging.info('Running(%d): %s', ps.pid, ps.command)