From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:60153) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bccxZ-0007pT-MR for qemu-devel@nongnu.org; Wed, 24 Aug 2016 14:31:43 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bccxR-0002Zt-7t for qemu-devel@nongnu.org; Wed, 24 Aug 2016 14:31:32 -0400 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]:38929) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bccxR-0002ZW-02 for qemu-devel@nongnu.org; Wed, 24 Aug 2016 14:31:25 -0400 Received: from pps.filterd (m0098394.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.11/8.16.0.11) with SMTP id u7OIStMT143382 for ; Wed, 24 Aug 2016 14:31:24 -0400 Received: from e06smtp08.uk.ibm.com (e06smtp08.uk.ibm.com [195.75.94.104]) by mx0a-001b2d01.pphosted.com with ESMTP id 250kvvum1v-1 (version=TLSv1.2 cipher=AES256-SHA bits=256 verify=NOT) for ; Wed, 24 Aug 2016 14:31:24 -0400 Received: from localhost by e06smtp08.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Wed, 24 Aug 2016 19:31:21 +0100 Received: from b06cxnps4074.portsmouth.uk.ibm.com (d06relay11.portsmouth.uk.ibm.com [9.149.109.196]) by d06dlp01.portsmouth.uk.ibm.com (Postfix) with ESMTP id DD2AD17D8024 for ; Wed, 24 Aug 2016 19:33:04 +0100 (BST) Received: from d06av03.portsmouth.uk.ibm.com (d06av03.portsmouth.uk.ibm.com [9.149.37.213]) by b06cxnps4074.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id u7OIVI5B20578654 for ; Wed, 24 Aug 2016 18:31:18 GMT Received: from d06av03.portsmouth.uk.ibm.com (localhost [127.0.0.1]) by d06av03.portsmouth.uk.ibm.com (8.14.4/8.14.4/NCO v10.0 AVout) with ESMTP id u7OIVIvv014062 for ; Wed, 24 Aug 2016 12:31:18 -0600 From: Sascha Silbe Date: Wed, 24 Aug 2016 20:30:57 +0200 In-Reply-To: <1472063464-790-1-git-send-email-silbe@linux.vnet.ibm.com> References: <1472063464-790-1-git-send-email-silbe@linux.vnet.ibm.com> Message-Id: <1472063464-790-2-git-send-email-silbe@linux.vnet.ibm.com> Subject: [Qemu-devel] [PATCH v2 1/7] docker.py: don't hang on large docker output List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org, Fam Zheng Cc: =?UTF-8?q?Alex=20Benn=C3=A9e?= Unlike Popen.communicate(), subprocess.call() doesn't read from the stdout file descriptor. If the child process produces more output than fits into the pipe buffer, it will block indefinitely. If we don't intend to consume the output, just send it straight to /dev/null to avoid this issue. Signed-off-by: Sascha Silbe Reviewed-by: Janosch Frank --- This fixes a hang for me when building the Ubuntu docker image (empty docker image cache). tests/docker/docker.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/tests/docker/docker.py b/tests/docker/docker.py index 222a105..efb2bf4 100755 --- a/tests/docker/docker.py +++ b/tests/docker/docker.py @@ -25,6 +25,10 @@ from tarfile import TarFile, TarInfo from StringIO import StringIO from shutil import copy, rmtree + +DEVNULL = open(os.devnull, 'wb') + + def _text_checksum(text): """Calculate a digest string unique to the text content""" return hashlib.sha1(text).hexdigest() @@ -34,8 +38,7 @@ def _guess_docker_command(): commands = [["docker"], ["sudo", "-n", "docker"]] for cmd in commands: if subprocess.call(cmd + ["images"], - stdout=subprocess.PIPE, - stderr=subprocess.PIPE) == 0: + stdout=DEVNULL, stderr=DEVNULL) == 0: return cmd commands_txt = "\n".join([" " + " ".join(x) for x in commands]) raise Exception("Cannot find working docker command. Tried:\n%s" % \ @@ -98,7 +101,7 @@ class Docker(object): def _do(self, cmd, quiet=True, infile=None, **kwargs): if quiet: - kwargs["stdout"] = subprocess.PIPE + kwargs["stdout"] = DEVNULL if infile: kwargs["stdin"] = infile return subprocess.call(self._command + cmd, **kwargs) -- 1.9.1