--- Webware-0.9.1/WebKit/ThreadedAppServer.py	2006-04-08 17:18:34.000000000 -0400
+++ Webware-0.9.1-threadframe/WebKit/ThreadedAppServer.py	2006-07-26 11:57:17.000000000 -0400
@@ -223,8 +223,12 @@
 			while self.running > 2:
 
 				# block for timeout seconds waiting for connections
-				input, output, exc = select.select(
-					self._sockets.values(), [], [], timeout)
+				try:
+   					input, output, exc = select.select(
+						self._sockets.values(), [], [], timeout)
+				except select.error, v:
+					if v[0] != errno.EINTR: raise
+					else: continue
 
 				for sock in input:
 					self._requestID += 1
@@ -921,6 +925,23 @@
 	else:
 		print 'No running app server was found.'
 
+def threadDump(signum, frame):
+	"""Signal handler for dumping thread stack frames to stdout"""
+	print time.asctime() + " - Received SIGQUIT. Attempting thread stack frame dump."
+	try:
+		import threadframe
+		frames = threadframe.dict()
+		items = frames.items()
+		items.sort()
+		print ('-' * 79) 
+		for thread_id, frame in items:
+			list = traceback.format_list(traceback.extract_stack(frame))
+			print 'Thread Id: %d   Reference Count: %d' % (thread_id, sys.getrefcount(frame))
+			print ''.join(list)
+		print ('-' * 79) 
+	except ImportError:
+		print "Error: Couldn't import threadframe extension"
+
 import signal
 
 try:
@@ -938,6 +959,12 @@
 	signal.signal(SIGTERM, shutDown)
 except AttributeError:
 	SIGTERM = None
+try:
+	SIGQUIT = signal.SIGQUIT
+	signal.signal(SIGQUIT, threadDump)
+except AttributeError:
+	SIGQUIT = None
+
 
 import re
 settingRE = re.compile(r'^(?:--)?([a-zA-Z][a-zA-Z0-9]*\.[a-zA-Z][a-zA-Z0-9]*)=')
