From 554e4b1444804eaef3ea5c345de7dbfe08ea0584 Mon Sep 17 00:00:00 2001 From: Christopher Haster Date: Sat, 19 Mar 2022 21:15:07 -0500 Subject: [PATCH] Fixed Popen deadlock issue in test.py As noted in Python's subprocess library: > This will deadlock when using stdout=PIPE and/or stderr=PIPE and the > child process generates enough output to a pipe such that it blocks > waiting for the OS pipe buffer to accept more data. Curiously, this only became a problem when updating to Ubuntu 20.04 in CI (python3.6 -> python3.8). --- .github/workflows/test.yml | 26 +++++++++++++++++--------- scripts/test.py | 5 ++++- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index a27157f5..bc8bb0c6 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -19,11 +19,27 @@ jobs: - name: install run: | # need a few additional tools + # + # note this includes gcc-10, which is required for -fcallgraph-info=su sudo apt-get update -qq - sudo apt-get install -qq python3 python3-pip lcov + sudo apt-get install -qq gcc-10 python3 python3-pip lcov sudo pip3 install toml + echo "CC=gcc-10" >> $GITHUB_ENV + gcc-10 --version + lcov --version python3 --version + # need newer lcov version for gcc-10 + #sudo apt-get remove lcov + #wget https://launchpad.net/ubuntu/+archive/primary/+files/lcov_1.15-1_all.deb + #sudo apt install ./lcov_1.15-1_all.deb + #lcov --version + #which lcov + #ls -lha /usr/bin/lcov + wget https://github.com/linux-test-project/lcov/releases/download/v1.15/lcov-1.15.tar.gz + tar xf lcov-1.15.tar.gz + sudo make -C lcov-1.15 install + # setup a ram-backed disk to speed up reentrant tests mkdir disks sudo mount -t tmpfs -o size=100m tmpfs disks @@ -36,14 +52,6 @@ jobs: echo "TESTFLAGS=$TESTFLAGS" >> $GITHUB_ENV - # we're not cross-compiling with x86, but we do need the newest - # version of gcc for the -fcallgraph-info=su flag - - name: install-x86_64 - if: ${{matrix.arch == 'x86_64'}} - run: | - sudo apt-get install -qq gcc-10 - echo "CC=gcc-10" >> $GITHUB_ENV - gcc-10 --version # cross-compile with ARM Thumb (32-bit, little-endian) - name: install-thumb if: ${{matrix.arch == 'thumb'}} diff --git a/scripts/test.py b/scripts/test.py index 9a50468a..cd9709e3 100755 --- a/scripts/test.py +++ b/scripts/test.py @@ -784,10 +784,13 @@ def main(**args): stdout=sp.PIPE if not args.get('verbose') else None, stderr=sp.STDOUT if not args.get('verbose') else None, universal_newlines=True) + stdout = [] + for line in proc.stdout: + stdout.append(line) proc.wait() if proc.returncode != 0: if not args.get('verbose'): - for line in proc.stdout: + for line in stdout: sys.stdout.write(line) sys.exit(-1)