Commit d6b7266a authored by Jan Kiene's avatar Jan Kiene
Browse files

Merge branch '63-deadlock-in-ivasmoderunner-py' into 'main'

Resolve "Deadlock in IvasModeRunner.py"

See merge request !62
parents 541af14e 5202e0e3
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -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'
+25 −24
Original line number Diff line number Diff line
@@ -1578,8 +1578,7 @@ class IvasModeRunner(IvasModeCollector.IvasModeCollector):
                            executor.submit(self.ivas_enc_thread, mode, config)
                        )
                while run_dec:

                    self.lock.acquire()
                    with self.lock:
                        # check if all enc tasks are done, either regularily or with exceptions
                        try:
                            finished_enc_tasks = concurrent.futures.wait(
@@ -1591,21 +1590,23 @@ class IvasModeRunner(IvasModeCollector.IvasModeCollector):
                            # not all done yet, continue...
                            pass

                    self.lock.release()

                    self.dec_queue["condition"].acquire()
                    if not self.dec_queue["dec_entries"]:
                    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"] != []:
                        # 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.show_final_stats()