diff --git a/resources/lib/app/application.py b/resources/lib/app/application.py index 533a7594..5738913d 100644 --- a/resources/lib/app/application.py +++ b/resources/lib/app/application.py @@ -65,6 +65,7 @@ class App(object): self.threads.append(thread) def deregister_fanart_thread(self, thread): + self.fanart_thread.unblock_callers() self.fanart_thread = None self.threads.remove(thread) @@ -85,6 +86,7 @@ class App(object): self.threads.append(thread) def deregister_caching_thread(self, thread): + self.caching_thread.unblock_callers() self.caching_thread = None self.threads.remove(thread) @@ -111,6 +113,7 @@ class App(object): """ Sync thread has done it's work and is e.g. about to die """ + thread.unblock_callers() self.threads.remove(thread) def suspend_threads(self, block=True): diff --git a/resources/lib/backgroundthread.py b/resources/lib/backgroundthread.py index 60acc59e..e4eb44d7 100644 --- a/resources/lib/backgroundthread.py +++ b/resources/lib/backgroundthread.py @@ -106,6 +106,13 @@ class KillableThread(threading.Thread): """ return not self._is_not_asleep.is_set() + def unblock_callers(self): + """ + Ensures that any other thread that requested this thread's suspension + is released + """ + self._suspension_reached.set() + class ProcessingQueue(Queue.Queue, object): """