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 <Sebastian@SSpaeth.de>
Signed-off-by: Nicolas Sebrecht <nicolas.s-dev@laposte.net>
This commit is contained in:
Sebastian Spaeth 2011-05-05 10:19:44 +02:00 committed by Nicolas Sebrecht
parent 5c7d7ee445
commit deab62fbd8
3 changed files with 4 additions and 2 deletions

View File

@ -21,6 +21,7 @@ Changes
Bug Fixes Bug Fixes
--------- ---------
* Fix the offlineimap crash when invoking debug option 'thread'
Pending for the next major release Pending for the next major release
================================== ==================================

View File

@ -226,8 +226,6 @@ class OfflineImap:
ui.add_debug(type) ui.add_debug(type)
if type.lower() == 'imap': if type.lower() == 'imap':
imaplib.Debug = 5 imaplib.Debug = 5
if type.lower() == 'thread':
threading._VERBOSE = 1
if options.runonce: if options.runonce:
# FIXME: maybe need a better # FIXME: maybe need a better

View File

@ -89,11 +89,14 @@ class UIBase:
(threading.currentThread().getName(), (threading.currentThread().getName(),
s.getthreadaccount(s), account) s.getthreadaccount(s), account)
s.threadaccounts[threading.currentThread()] = account s.threadaccounts[threading.currentThread()] = account
s.debug('thread', "Register new thread '%s' (account '%s')" %\
(threading.currentThread().getName(), account))
def unregisterthread(s, thr): def unregisterthread(s, thr):
"""Recognizes a thread has exited.""" """Recognizes a thread has exited."""
if s.threadaccounts.has_key(thr): if s.threadaccounts.has_key(thr):
del s.threadaccounts[thr] del s.threadaccounts[thr]
s.debug('thread', "Unregister thread '%s'" % thr.getName())
def getthreadaccount(s, thr = None): def getthreadaccount(s, thr = None):
if not thr: if not thr: