Merge pull request #1557 from croneter/fix-racing
Fix a racing condition that could lead to the sync getting stuck
This commit is contained in:
commit
6201a04513
3 changed files with 22 additions and 1 deletions
|
@ -170,6 +170,24 @@ class ProcessingQueue(Queue.Queue, object):
|
||||||
with self.mutex:
|
with self.mutex:
|
||||||
self._add_section(section)
|
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):
|
def _add_section(self, section):
|
||||||
self._sections.append(section)
|
self._sections.append(section)
|
||||||
self._queues.append(
|
self._queues.append(
|
||||||
|
|
|
@ -62,7 +62,8 @@ class FillMetadataQueue(common.LibrarySyncMixin,
|
||||||
count += 1
|
count += 1
|
||||||
# We might have received LESS items from the PMS than anticipated.
|
# We might have received LESS items from the PMS than anticipated.
|
||||||
# Ensures that our queues finish
|
# 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',
|
LOG.debug('%s items to process for section %s',
|
||||||
section.number_of_items, section)
|
section.number_of_items, section)
|
||||||
|
|
||||||
|
|
|
@ -109,6 +109,8 @@ class Section(object):
|
||||||
Sections compare equal if their section_id, name and plex_type (first
|
Sections compare equal if their section_id, name and plex_type (first
|
||||||
prio) OR section_type (if there is no plex_type is set) compare equal
|
prio) OR section_type (if there is no plex_type is set) compare equal
|
||||||
"""
|
"""
|
||||||
|
if not isinstance(section, Section):
|
||||||
|
return False
|
||||||
return (self.section_id == section.section_id and
|
return (self.section_id == section.section_id and
|
||||||
self.name == section.name and
|
self.name == section.name and
|
||||||
(self.plex_type == section.plex_type if self.plex_type else
|
(self.plex_type == section.plex_type if self.plex_type else
|
||||||
|
|
Loading…
Reference in a new issue