Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 6 additions & 13 deletions test/functional/test_runner.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import os
import time
import shutil
import signal
import subprocess
import sys
import tempfile
Expand Down Expand Up @@ -548,9 +549,11 @@ def run_tests(*, test_list, src_dir, build_dir, tmpdir, jobs=1, enable_coverage=

all_passed = all(map(lambda test_result: test_result.was_successful, test_results)) and coverage_passed

# This will be a no-op unless failfast is True in which case there may be dangling
# processes which need to be killed.
job_queue.kill_and_join()
# Clean up dangling processes if any. This may only happen with --failfast option.
# Killing the process group will also terminate the current process but that is
# not an issue
if len(job_queue.jobs):
os.killpg(os.getpgid(0), signal.SIGKILL)

sys.exit(not all_passed)

Expand Down Expand Up @@ -647,16 +650,6 @@ def get_next(self):
print('.', end='', flush=True)
dot_count += 1

def kill_and_join(self):
"""Send SIGKILL to all jobs and block until all have ended."""
procs = [i[2] for i in self.jobs]

for proc in procs:
proc.kill()

for proc in procs:
proc.wait()


class TestResult():
def __init__(self, name, status, time):
Expand Down