From 07b12774b472e5e3b64a2b2794d6ab177b3e41e7 Mon Sep 17 00:00:00 2001 From: Charles Haley <> Date: Sat, 11 Jun 2011 20:53:01 +0100 Subject: [PATCH] Fix problem in FunctionDispatcher where it hangs if calling thread == called thread. --- src/calibre/gui2/__init__.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/calibre/gui2/__init__.py b/src/calibre/gui2/__init__.py index 8499e304c3..ae25dead4e 100644 --- a/src/calibre/gui2/__init__.py +++ b/src/calibre/gui2/__init__.py @@ -305,8 +305,11 @@ class FunctionDispatcher(QObject): self.dispatch_signal.connect(self.dispatch, type=typ) self.q = Queue.Queue() self.lock = threading.Lock() + self.calling_thread = QThread.currentThread() def __call__(self, *args, **kwargs): + if self.calling_thread == QThread.currentThread(): + return self.func(*args, **kwargs) with self.lock: self.dispatch_signal.emit(self.q, args, kwargs) res = self.q.get()