extras-buildsys/common DebugUtils.py, 1.1, 1.2 HTTPServer.py, 1.7, 1.8 Makefile, 1.9, 1.10
Daniel Williams (dcbw)
fedora-extras-commits at redhat.com
Tue Nov 29 06:41:48 UTC 2005
- Previous message: extras-buildsys ChangeLog,1.154,1.155
- Next message: extras-buildsys/server BuildMaster.py, 1.36, 1.37 Builder.py, 1.24, 1.25 PackageJob.py, 1.38, 1.39 Repo.py, 1.19, 1.20 main.py, 1.16, 1.17
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Author: dcbw
Update of /cvs/fedora/extras-buildsys/common
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv28008/common
Modified Files:
HTTPServer.py Makefile
Added Files:
DebugUtils.py
Log Message:
2005-11-29 Dan Williams <dcbw at redhat.com>
* Add a traceback server that listens on a Unix socket
and writes backtraces for all threads to it. Disabled
by default.
Index: DebugUtils.py
===================================================================
RCS file: DebugUtils.py
diff -N DebugUtils.py
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ DebugUtils.py 29 Nov 2005 06:41:46 -0000 1.2
@@ -0,0 +1,106 @@
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Library General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# Copyright 2005 Dan Williams <dcbw at redhat.com> and Red Hat, Inc.
+
+import sys
+import SocketServer
+import traceback
+import os
+import threading
+import thread
+import time
+
+haveThreadframe = True
+try:
+ import threadframe
+except ImportError:
+ haveThreadframe = False
+
+
+tlLock = threading.Lock()
+threadList = {}
+
+
+def registerThreadName(t):
+ name = t.getName()
+ if name and len(name) > 0:
+ tlLock.acquire()
+ threadList[thread.get_ident()] = name
+ tlLock.release()
+
+class ThreadTracebackRequestHandler(SocketServer.StreamRequestHandler):
+ def handle(self):
+ if not haveThreadframe:
+ self.wfile.write("Threadframe not installed. No traceback available.")
+ return
+
+ # Python 2.2 does not support threadframe.dict()
+ if sys.version_info[:3] < (2, 3, 0):
+ frames = threadframe.threadframe()
+ for frame in frames:
+ self.wfile.write(('-' * 72) + '\n')
+ self.wfile.write('frame ref count = %d\n' % sys.getrefcount(frame))
+ traceback.print_stack(f=frame, limit=None, file=self.wfile)
+ self.wfile.write("\n")
+ else:
+ frames = threadframe.dict()
+ for thread_id, frame in frames.iteritems():
+ tlLock.acquire()
+ thread_name = ''
+ try:
+ thread_name = " (%s)" % threadList[thread_id]
+ except:
+ pass
+ tlLock.release()
+ self.wfile.write(('-' * 72) + '\n')
+ self.wfile.write('[%s%s] %d' % (thread_id, thread_name, sys.getrefcount(frame)))
+ traceback.print_stack(frame, limit=None, file=self.wfile)
+ self.wfile.write("\n")
+
+
+class ThreadTracebackServer(threading.Thread):
+ def __init__(self, address="/tmp/plague-debug"):
+ if os.path.exists(address):
+ os.remove(address)
+ self._address = address
+ self._server = SocketServer.ThreadingUnixStreamServer(address, ThreadTracebackRequestHandler)
+ self._stop = False
+ threading.Thread.__init__(self)
+ self.setName("DebugUtilsTracebackServer")
+
+ def run(self):
+ print "Starting traceback server on %s." % self._address
+ registerThreadName(self)
+ while not self._stop:
+ self._server.handle_request()
+
+ def stop(self):
+ self._stop = True
+ self._server.server_close()
+
+def main():
+ address = "/tmp/plague-debug"
+ server = ThreadTracebackServer(address)
+ server.start()
+ while True:
+ try:
+ time.sleep(1)
+ except KeyboardInterrupt:
+ server.stop()
+ print "Exiting..."
+ os._exit(0)
+
+if __name__ == '__main__':
+ main()
Index: HTTPServer.py
===================================================================
RCS file: /cvs/fedora/extras-buildsys/common/HTTPServer.py,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- HTTPServer.py 18 Nov 2005 14:43:09 -0000 1.7
+++ HTTPServer.py 29 Nov 2005 06:41:46 -0000 1.8
@@ -26,6 +26,7 @@
import time
import socket
from OpenSSL import SSL
+import DebugUtils
class PlgHTTPRequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
@@ -104,8 +105,10 @@
self._stop = False
self._stopped = False
threading.Thread.__init__(self)
+ self.setName("PlgHTTPServerManager: %s/%s" % (addr, http_dir))
def run(self):
+ DebugUtils.registerThreadName(self)
while not self._stop:
self._server.handle_request()
self._stopped = True
Index: Makefile
===================================================================
RCS file: /cvs/fedora/extras-buildsys/common/Makefile,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- Makefile 31 Aug 2005 01:56:38 -0000 1.9
+++ Makefile 29 Nov 2005 06:41:46 -0000 1.10
@@ -11,6 +11,7 @@
ArchUtils.py \
BaseConfig.py \
CommonErrors.py \
+ DebugUtils.py \
ExecUtils.py \
FileDownloader.py \
HTTPSURLopener.py \
- Previous message: extras-buildsys ChangeLog,1.154,1.155
- Next message: extras-buildsys/server BuildMaster.py, 1.36, 1.37 Builder.py, 1.24, 1.25 PackageJob.py, 1.38, 1.39 Repo.py, 1.19, 1.20 main.py, 1.16, 1.17
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the scm-commits
mailing list