Add threadframe and TracebackUtils.py so we can get tracebacks of dbus deadlocks

This commit is contained in:
Dan Williams
2006-08-16 23:05:44 -04:00
parent 6530653636
commit 95c06280ca
11 changed files with 321 additions and 1 deletions
+1
View File
@@ -8,6 +8,7 @@ sugar_PYTHON = \
env.py \
logger.py \
setup.py \
TracebackUtils.py \
util.py
EXTRA_DIST = __uninstalled__.py
+37
View File
@@ -0,0 +1,37 @@
import sys
import traceback
import os
import signal
haveThreadframe = True
try:
import threadframe
except ImportError:
haveThreadframe = False
class TracebackHelper(object):
def __init__(self):
fname = "%s-%d" % (os.path.basename(sys.argv[0]), os.getpid())
self._fpath = os.path.join("/tmp", fname)
print "Tracebacks will be written to %s on SIGUSR1" % self._fpath
signal.signal(signal.SIGUSR1, self._handler)
def __del__(self):
try:
os.remove(self._fpath)
except OSError:
pass
def _handler(self, signum, pframe):
f = open(self._fpath, "a")
if not haveThreadframe:
f.write("Threadframe not installed. No traceback available.\n")
else:
frames = threadframe.dict()
for thread_id, frame in frames.iteritems():
f.write(('-' * 79) + '\n')
f.write('[Thread %s] %d' % (thread_id, sys.getrefcount(frame)) + '\n')
traceback.print_stack(frame, limit=None, file=f)
f.write("\n")
f.write('\n')
f.close()