diff options
author | Sam Gross <colesbury@gmail.com> | 2022-01-11 03:03:09 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-01-11 03:03:09 (GMT) |
commit | e13cdca0f5224ec4e23bdd04bb3120506964bc8b (patch) | |
tree | 8c68fa588ecb3919c98c5daed7fe7b34a7c332bc | |
parent | 081a2140083680ffc309e53699aea29e71760d70 (diff) | |
download | cpython-e13cdca0f5224ec4e23bdd04bb3120506964bc8b.zip cpython-e13cdca0f5224ec4e23bdd04bb3120506964bc8b.tar.gz cpython-e13cdca0f5224ec4e23bdd04bb3120506964bc8b.tar.bz2 |
bpo-46205: exit if no workers are alive in runtest_mp (GH-30470)
-rw-r--r-- | Lib/test/libregrtest/runtest_mp.py | 18 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Tests/2022-01-07-14-06-12.bpo-46205.dnc2OC.rst | 1 |
2 files changed, 11 insertions, 8 deletions
diff --git a/Lib/test/libregrtest/runtest_mp.py b/Lib/test/libregrtest/runtest_mp.py index f02f56e..75444e4 100644 --- a/Lib/test/libregrtest/runtest_mp.py +++ b/Lib/test/libregrtest/runtest_mp.py @@ -392,16 +392,12 @@ class MultiprocessTestRunner: worker.wait_stopped(start_time) def _get_result(self) -> QueueOutput | None: - if not any(worker.is_alive() for worker in self.workers): - # all worker threads are done: consume pending results - try: - return self.output.get(timeout=0) - except queue.Empty: - return None - use_faulthandler = (self.ns.timeout is not None) timeout = PROGRESS_UPDATE - while True: + + # bpo-46205: check the status of workers every iteration to avoid + # waiting forever on an empty queue. + while any(worker.is_alive() for worker in self.workers): if use_faulthandler: faulthandler.dump_traceback_later(MAIN_PROCESS_TIMEOUT, exit=True) @@ -417,6 +413,12 @@ class MultiprocessTestRunner: if running and not self.ns.pgo: self.log('running: %s' % ', '.join(running)) + # all worker threads are done: consume pending results + try: + return self.output.get(timeout=0) + except queue.Empty: + return None + def display_result(self, mp_result: MultiprocessResult) -> None: result = mp_result.result diff --git a/Misc/NEWS.d/next/Tests/2022-01-07-14-06-12.bpo-46205.dnc2OC.rst b/Misc/NEWS.d/next/Tests/2022-01-07-14-06-12.bpo-46205.dnc2OC.rst new file mode 100644 index 0000000..7c6121f --- /dev/null +++ b/Misc/NEWS.d/next/Tests/2022-01-07-14-06-12.bpo-46205.dnc2OC.rst @@ -0,0 +1 @@ +Fix hang in runtest_mp due to race condition |