Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/bindings/threadframe/test.py
diff options
context:
space:
mode:
Diffstat (limited to 'bindings/threadframe/test.py')
-rw-r--r--bindings/threadframe/test.py57
1 files changed, 57 insertions, 0 deletions
diff --git a/bindings/threadframe/test.py b/bindings/threadframe/test.py
new file mode 100644
index 0000000..6f1c82a
--- /dev/null
+++ b/bindings/threadframe/test.py
@@ -0,0 +1,57 @@
+import sys, time, threading, thread, os, traceback, threadframe, pprint
+# daemon thread that spouts Monty Pythonesque nonsense
+class T(threading.Thread):
+ def run(self):
+ while 1:
+ time.sleep(1)
+ print '[%d] Spam spam spam spam. Lovely spam! Wonderful spam!' % ( thread.get_ident(), )
+# thread that cause a deliberate deadlock with itself
+U_lock = threading.Lock()
+class U(threading.Thread):
+ def run(self):
+ U_lock.acquire()
+ U_lock.acquire()
+# thread that will exit after the thread frames are extracted but before
+# they are printed
+V_event = threading.Event()
+class V(threading.Thread):
+ def run(self):
+ V_event.clear()
+ V_event.wait()
+
+print 'ident of main thread is: %d' % (thread.get_ident(),)
+print
+print 'launching daemon thread...',
+T().start()
+print 'done'
+print 'launching self-deadlocking thread...',
+U().start()
+print 'done'
+print 'launching thread that will die before the end...',
+v = V()
+v.start()
+print 'done'
+
+time.sleep(5)
+
+# Python 2.2 does not support threadframe.dict()
+if sys.hexversion < 0x02030000:
+ frames = threadframe.threadframe()
+else:
+ frames = threadframe.dict()
+
+# signal the thread V to die, then wait for it to oblige
+V_event.set()
+v.join()
+
+if sys.hexversion < 0x02030000:
+ for frame in frames:
+ print '-' * 72
+ print 'frame ref count = %d' % sys.getrefcount(frame)
+ traceback.print_stack(frame)
+else:
+ for thread_id, frame in frames.iteritems():
+ print '-' * 72
+ print '[%s] %d' % (thread_id, sys.getrefcount(frame))
+ traceback.print_stack(frame)
+os._exit(0)