diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 2e23dd9fc123aac511f1caa92d867a8be17c5020..59507b8d8fbf135891a1bda4d08d96b70f48d2f1 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -124,8 +124,6 @@ build-codec-sanitizers-linux: codec-smoke-test: extends: .test-job-linux-needs-testv-dir # temporarily restrict this job to the only runner which (so far) seems to runit without problems - tags: - - smoke-test timeout: "5 minutes" rules: - if: $CI_PIPELINE_SOURCE == 'merge_request_event' diff --git a/scripts/pyivastest/IvasModeRunner.py b/scripts/pyivastest/IvasModeRunner.py index 84616a93315e20ed6797282471d53f0a93950bdf..246e8139ad9775cba9766c92a59da42b81ec28fe 100755 --- a/scripts/pyivastest/IvasModeRunner.py +++ b/scripts/pyivastest/IvasModeRunner.py @@ -1578,34 +1578,35 @@ class IvasModeRunner(IvasModeCollector.IvasModeCollector): executor.submit(self.ivas_enc_thread, mode, config) ) while run_dec: - - self.lock.acquire() - # check if all enc tasks are done, either regularily or with exceptions - try: - finished_enc_tasks = concurrent.futures.wait( - tasks_enc, timeout=0.001 - ) - if len(finished_enc_tasks.not_done) == 0: - self.dec_queue["all_encoded"] = True - except concurrent.futures.TimeoutError: - # not all done yet, continue... - pass - - self.lock.release() - - self.dec_queue["condition"].acquire() - if not self.dec_queue["dec_entries"]: + with self.lock: + # check if all enc tasks are done, either regularily or with exceptions + try: + finished_enc_tasks = concurrent.futures.wait( + tasks_enc, timeout=0.001 + ) + if len(finished_enc_tasks.not_done) == 0: + self.dec_queue["all_encoded"] = True + except concurrent.futures.TimeoutError: + # not all done yet, continue... + pass + + with self.dec_queue["condition"]: + dec_queue_empty = len(self.dec_queue["dec_entries"]) == 0 all_encoded = self.dec_queue["all_encoded"] - if all_encoded: + all_modes_done = self.stats["num_modes"] == self.stats["num_modes_finished"] + + if dec_queue_empty and all_encoded and all_modes_done: + self.dec_queue["condition"].notify() break - self.dec_queue["condition"].wait(10) + else: + self.dec_queue["condition"].wait(1) - while self.dec_queue["dec_entries"] != []: - config = self.dec_queue["dec_entries"].pop(0) - tasks_dec.append(executor.submit(self.ivas_dec_thread, config)) + # can not reuse dec_queue_empty here, since there might be new items after waiting + while len(self.dec_queue["dec_entries"]) != 0: + config = self.dec_queue["dec_entries"].pop(0) + tasks_dec.append(executor.submit(self.ivas_dec_thread, config)) - self.dec_queue["condition"].notify() - self.dec_queue["condition"].release() + self.dec_queue["condition"].notify() self.show_final_stats()