From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:60089) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bh5Ks-0003iC-F8 for qemu-devel@nongnu.org; Mon, 05 Sep 2016 21:38:03 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bh5Kp-0003BN-9P for qemu-devel@nongnu.org; Mon, 05 Sep 2016 21:38:02 -0400 Received: from mx1.redhat.com ([209.132.183.28]:54034) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bh5Kp-0003BJ-4A for qemu-devel@nongnu.org; Mon, 05 Sep 2016 21:37:59 -0400 Date: Tue, 6 Sep 2016 09:30:45 +0800 From: Fam Zheng Message-ID: <20160906013045.GA653@al.usersys.redhat.com> References: <1472063464-790-1-git-send-email-silbe@linux.vnet.ibm.com> <1472063464-790-2-git-send-email-silbe@linux.vnet.ibm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1472063464-790-2-git-send-email-silbe@linux.vnet.ibm.com> Subject: Re: [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: Sascha Silbe Cc: qemu-devel@nongnu.org, Alex =?iso-8859-1?Q?Benn=E9e?= On Wed, 08/24 20:30, Sascha Silbe wrote: > 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') > + > + Too many blank lines? Otherwise looks good. > 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 >