jvmti.cc (_Jv_JVMTI_GetAllThreads): New function.

2007-01-16  Kyle Galloway  <kgallowa@redhat.com>

	* jvmti.cc (_Jv_JVMTI_GetAllThreads): New function.
	* testsuite/libjava.jvmti/getallthreads.java: New test.
	* testsuite/libjava.jvmti/natgetallthreads.cc: Ditto.
	* testsuite/libjava.jvmti/getallthreads.out: Ditto.
	* testsuite/libjava.jvmti/getallthreads.h: Ditto.
	* testsuite/libjava.jvmti/getallthreads.jar: Ditto.

From-SVN: r120827
This commit is contained in:
Kyle Galloway 2007-01-16 15:06:28 +00:00 committed by Kyle Galloway
parent 878aa81717
commit 05794ce850
7 changed files with 250 additions and 1 deletions

View file

@ -0,0 +1,35 @@
// DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*-
#ifndef __getallthreads__
#define __getallthreads__
#pragma interface
#include <java/lang/Thread.h>
#include <gcj/array.h>
extern "Java"
{
class getallthreads;
}
class getallthreads : public ::java::lang::Thread
{
public:
getallthreads ();
static void do_getallthreads_tests ();
virtual void run ();
virtual void natPlaceholder ();
virtual void natRunner ();
virtual void placeholder ();
virtual void runner ();
static void main (JArray< ::java::lang::String *> *);
static jint thread_num;
static ::java::util::ArrayList *threads;
jint __attribute__((aligned(__alignof__( ::java::lang::Thread )))) ex_frames;
jboolean done;
static ::java::lang::Class class$;
};
#endif /* __getallthreads__ */

Binary file not shown.

View file

@ -0,0 +1,80 @@
// Test JVMTI GetAllThreads
import java.util.ArrayList;
public class getallthreads extends Thread
{
public static int thread_num;
public static ArrayList threads;
public int ex_frames;
public boolean done = false;
public static native void do_getallthreads_tests ();
public void run ()
{
ex_frames = thread_num;
thread_num++;
if (ex_frames > 0)
{
if ((ex_frames % 2) == 0)
placeholder ();
else
natPlaceholder ();
}
else
runner ();
}
public native void natPlaceholder ();
public native void natRunner ();
public void placeholder ()
{
ex_frames--;
if (ex_frames > 0)
{
if ((thread_num % 2) == 0)
placeholder ();
else
natPlaceholder ();
}
else
runner ();
}
public void runner ()
{
done = true;
while (done)
yield ();
}
public static void main (String[] args)
{
System.out.println ("JVMTI GetAllThreads tests");
threads = new ArrayList (20);
getallthreads t;
for (int i = 0; i < 20; i++)
{
t = new getallthreads ();
threads.add (t);
t.start ();
while (!t.done)
yield ();
}
do_getallthreads_tests ();
for (int i = 0; i < 20; i++)
{
t = (getallthreads) threads.get(i);
t.done = false;
}
}
}

View file

@ -0,0 +1,23 @@
JVMTI GetAllThreads tests
Found thread 1
Found thread 2
Found thread 3
Found thread 4
Found thread 5
Found thread 6
Found thread 7
Found thread 8
Found thread 9
Found thread 10
Found thread 11
Found thread 12
Found thread 13
Found thread 14
Found thread 15
Found thread 16
Found thread 17
Found thread 18
Found thread 19
Found thread 20
Found thread 21
Found thread 22

View file

@ -0,0 +1,55 @@
#include <gcj/cni.h>
#include <jvm.h>
#include <jvmti.h>
#include <stdio.h>
#include "jvmti-int.h"
#include "getallthreads.h"
void
getallthreads::natPlaceholder ()
{
ex_frames--;
if (ex_frames > 0)
{
if ((getallthreads::thread_num % 2) == 0)
placeholder ();
else
natPlaceholder ();
}
else
natRunner ();
}
void
getallthreads::natRunner ()
{
done = true;
while (done)
yield ();
}
void
getallthreads::do_getallthreads_tests ()
{
jvmtiEnv *env;
JavaVM *vm = _Jv_GetJavaVM ();
vm->GetEnv (reinterpret_cast<void **> (&env), JVMTI_VERSION_1_0);
jint num_threads;
jthread *thread_arr;
jvmtiError jerr = env->GetAllThreads (&num_threads, &thread_arr);
if (jerr != JVMTI_ERROR_NONE)
{
printf ("Test Failed, JVMTI Error!\n");
return;
}
env->Deallocate (reinterpret_cast<unsigned char *> (thread_arr));
for (int i = 0; i < num_threads; i++)
printf ("Found thread %d\n", i+1 );
}