From 96e67d31fbf36967c9b56a7e1a7a93d99ae3bc35 Mon Sep 17 00:00:00 2001 From: croneter Date: Sun, 25 Jul 2021 10:16:56 +0200 Subject: [PATCH] Fix a racing condition that could lead to the sync getting stuck --- resources/lib/backgroundthread.py | 18 ++++++++++++++++++ .../lib/library_sync/fill_metadata_queue.py | 3 ++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/resources/lib/backgroundthread.py b/resources/lib/backgroundthread.py index 6bf119ff..f43fbfb8 100644 --- a/resources/lib/backgroundthread.py +++ b/resources/lib/backgroundthread.py @@ -170,6 +170,24 @@ class ProcessingQueue(queue.Queue, object): with self.mutex: self._add_section(section) + def change_section_number_of_items(self, section, number_of_items): + """ + Hit this method if you've reset section.number_of_items to make + sure we're not blocking + """ + with self.mutex: + self._change_section_number_of_items(section, number_of_items) + + def _change_section_number_of_items(self, section, number_of_items): + section.number_of_items = number_of_items + if (self._current_section == section + and self._counter == number_of_items): + # We were actually waiting for more items to come in - but there + # aren't any! + self._init_next_section() + if self._qsize() > 0: + self.not_empty.notify() + def _add_section(self, section): self._sections.append(section) self._queues.append( diff --git a/resources/lib/library_sync/fill_metadata_queue.py b/resources/lib/library_sync/fill_metadata_queue.py index d1273860..8d1bdf4b 100644 --- a/resources/lib/library_sync/fill_metadata_queue.py +++ b/resources/lib/library_sync/fill_metadata_queue.py @@ -61,7 +61,8 @@ class FillMetadataQueue(common.LibrarySyncMixin, count += 1 # We might have received LESS items from the PMS than anticipated. # Ensures that our queues finish - section.number_of_items = count + self.processing_queue.change_section_number_of_items(section, + count) LOG.debug('%s items to process for section %s', section.number_of_items, section)