From deab62fbd84c003c5dacdf829faa1a89b9e74e9e Mon Sep 17 00:00:00 2001 From: Sebastian Spaeth Date: Thu, 5 May 2011 10:19:44 +0200 Subject: [PATCH] Fix the broken thread debugging Using threading._VERBOSE=1 is broken since python 2.6 till at least python 3.2, (http://bugs.python.org/issue4188) so we can't use it for our thread debugging. Remove the usage of threading._VERBOSE, and implement a "light thread debug log" that for now outputs information when a new thread is being registered and when it is being unregistered. I am sure we will be able to add more thread debugging information over the time. Besides '-d thread' this will re-enable the usage of -d 'all' for the most verbose debugging of all categories. Signed-off-by: Sebastian Spaeth Signed-off-by: Nicolas Sebrecht --- Changelog.draft.rst | 1 + offlineimap/init.py | 2 -- offlineimap/ui/UIBase.py | 3 +++ 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/Changelog.draft.rst b/Changelog.draft.rst index 2b109a3..eacfea1 100644 --- a/Changelog.draft.rst +++ b/Changelog.draft.rst @@ -21,6 +21,7 @@ Changes Bug Fixes --------- +* Fix the offlineimap crash when invoking debug option 'thread' Pending for the next major release ================================== diff --git a/offlineimap/init.py b/offlineimap/init.py index 296b84b..287bbbf 100644 --- a/offlineimap/init.py +++ b/offlineimap/init.py @@ -226,8 +226,6 @@ class OfflineImap: ui.add_debug(type) if type.lower() == 'imap': imaplib.Debug = 5 - if type.lower() == 'thread': - threading._VERBOSE = 1 if options.runonce: # FIXME: maybe need a better diff --git a/offlineimap/ui/UIBase.py b/offlineimap/ui/UIBase.py index 02593e6..a1cc864 100644 --- a/offlineimap/ui/UIBase.py +++ b/offlineimap/ui/UIBase.py @@ -89,11 +89,14 @@ class UIBase: (threading.currentThread().getName(), s.getthreadaccount(s), account) s.threadaccounts[threading.currentThread()] = account + s.debug('thread', "Register new thread '%s' (account '%s')" %\ + (threading.currentThread().getName(), account)) def unregisterthread(s, thr): """Recognizes a thread has exited.""" if s.threadaccounts.has_key(thr): del s.threadaccounts[thr] + s.debug('thread', "Unregister thread '%s'" % thr.getName()) def getthreadaccount(s, thr = None): if not thr: