diff --git a/couchpotato/core/event.py b/couchpotato/core/event.py index 232c7403..6f588481 100644 --- a/couchpotato/core/event.py +++ b/couchpotato/core/event.py @@ -66,11 +66,19 @@ def fireEvent(name, *args, **kwargs): merge = True except: pass + # Merge items + in_order = False + try: + del kwargs['in_order'] + in_order = True + except: pass + e = events[name] - e.lock.acquire() + if not in_order: e.lock.acquire() e.asynchronous = False + e.in_order = in_order result = e(*args, **kwargs) - e.lock.release() + if not in_order: e.lock.release() if single and not merge: results = None diff --git a/couchpotato/runner.py b/couchpotato/runner.py index 1888906c..18184c81 100644 --- a/couchpotato/runner.py +++ b/couchpotato/runner.py @@ -161,7 +161,7 @@ def runCouchPotato(options, base_path, args, desktop = None): setup() if initialize: - fireEvent('app.initialize') + fireEvent('app.initialize', in_order = True) fire_load = True diff --git a/libs/axl/axel.py b/libs/axl/axel.py index bbd145bd..59ffa1be 100644 --- a/libs/axl/axel.py +++ b/libs/axl/axel.py @@ -16,7 +16,6 @@ import Queue import hashlib import sys import threading -import time class Event(object): """ @@ -96,6 +95,7 @@ class Event(object): (None, None, handler), ... # asynchronous execution ) """ + self.in_order = False self.asynchronous = asynch self.exc_info = exc_info self.lock = lock @@ -181,6 +181,9 @@ class Event(object): h_ = self.queue.get() handler, memoize, timeout = self.handlers[h_] + if self.lock and self.in_order: + self.lock.acquire() + try: r = self._memoize(memoize, timeout, handler, *args, **kwargs) if not self.asynchronous: @@ -197,6 +200,9 @@ class Event(object): if not self.asynchronous: self.queue.task_done() + if self.lock and self.in_order: + self.lock.release() + if self.queue.empty(): raise Queue.Empty