1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- public class getstacktrace
- extends Thread
- {
- public boolean done = false;
- // num_frames is the number of frames > the original run () call so if
- // num_frames = 1, the thread will have 2 frames, the original Thread.run
- // call, plus one additional
- public int num_frames, thread_num;
- public static int num_threads = 1;
- static
- {
- System.loadLibrary("natgetstacktrace");
- }
- public void run ()
- {
- thread_num = num_threads++;
- num_frames = thread_num;
- if (num_frames <= 1)
- {
- natRunner ();
- }
- else
- {
- if (thread_num % 2 == 0)
- natPlaceholder ();
- else
- placeholder ();
- }
- }
- public void placeholder ()
- {
- num_frames--;
- if (num_frames <= 1)
- {
- if (thread_num % 2 == 1)
- natRunner ();
- else
- runner ();
- }
- else
- {
- if (thread_num % 2 == 0)
- natPlaceholder ();
- else
- placeholder ();
- }
- }
-
- public void runner ()
- {
- done = true;
- while (done)
- yield ();
- }
- public native void natPlaceholder ();
- public native void natRunner ();
- public static native int do_getstacktrace_tests (Thread[] threads);
- public static void main (String[] args)
- {
- System.out.println ("JVMTI GetStackTrace Interpreted Test");
- getstacktrace[] threads = new getstacktrace[10];
- for (int i = 0; i < threads.length; i++)
- {
- threads[i] = new getstacktrace ();
- threads[i].start ();
- while (!threads[i].done)
- yield ();
- }
- do_getstacktrace_tests (threads);
- for (int i = 0; i < threads.length; i++)
- {
- threads[i].done = false;
- }
- }
- }
|