natNativeThread.cc: New file.
* gnu/gcj/jni/natNativeThread.cc: New file. * gnu/gcj/jni/NativeThread.java: New file. * java/lang/Thread.java (data): Now a RawData. * include/jvm.h (_Jv_GetCurrentJNIEnv, _Jv_SetCurrentJNIEnv): Declare. * Makefile.in: Rebuilt. * Makefile.am (java/lang/Thread.h): New target. (ordinary_java_source_files): Added NativeThread.java. (nat_source_files): Added natNativeThread.cc. * java/lang/natThread.cc: Include <jni.h> (struct natThread): Added `jni_env' field. (_Jv_GetCurrentJNIEnv): New function. (_Jv_SetCurrentJNIEnv): Likewise. (initialize_native): Initialize jni_env. Include RawData.h. * jni.cc (ThreadGroupClass): New define. (_Jv_JNI_InvokeFunctions): New structure. (JNI_GetCreatedJavaVMs): New function. (the_vm): New global. (JNI_GetDefaultJavaVMInitArgs): New function. Include NativeThread.h. (NativeThreadClass): New define. (_Jv_JNI_EnsureLocalCapacity): Return JNI_ERR, not -1. (_Jv_JNI_DestroyJavaVM): New function. (_Jv_JNI_AttachCurrentThread): New function. (_Jv_JNI_DetachCurrentThread): New function. (_Jv_JNI_GetEnv): New function. (JNI_CreateJavaVM): New function. (_Jv_JNI_GetJavaVM): New function. (_Jv_JNIFunctions): Added entry for GetJavaVM. * include/jni.h (JavaVMAttachArgs): New structure. (JNI_EDETACHED): New define. (JNI_EVERSION): Likewise. (JavaVM): Define properly. (struct JNIInvokeInterface): New structure. (class _Jv_JavaVM): New class. (JNI_OnLoad, JNI_OnUnload): Declare. (JNI_GetDefaultJavaVMInitArgs, JNI_CreateJavaVM, JNI_GetCreatedJavaVMs): Declare. (JavaVMInitArgs): New typedef. (JavaVMOption): Likewise. (JNI_ERR): New define. (JNI_OK): Likewise. From-SVN: r31901
This commit is contained in:
parent
ef86eabb6c
commit
aaf0766e9f
10 changed files with 560 additions and 30 deletions
|
@ -1,6 +1,6 @@
|
|||
// natThread.cc - Native part of Thread class.
|
||||
|
||||
/* Copyright (C) 1998, 1999 Red Hat, Inc.
|
||||
/* Copyright (C) 1998, 1999, 2000 Red Hat, Inc.
|
||||
|
||||
This file is part of libgcj.
|
||||
|
||||
|
@ -23,6 +23,9 @@ details. */
|
|||
#include <java/lang/IllegalThreadStateException.h>
|
||||
#include <java/lang/InterruptedException.h>
|
||||
#include <java/lang/NullPointerException.h>
|
||||
#include <gnu/gcj/RawData.h>
|
||||
|
||||
#include <jni.h>
|
||||
|
||||
|
||||
|
||||
|
@ -40,6 +43,9 @@ struct natThread
|
|||
// This is private data for the thread system layer.
|
||||
_Jv_Thread_t *thread;
|
||||
|
||||
// Each thread has its own JNI object.
|
||||
JNIEnv *jni_env;
|
||||
|
||||
// All threads waiting to join this thread are linked together and
|
||||
// waiting on their respective `interrupt' condition variables.
|
||||
// When this thread exits, it notifies each such thread by
|
||||
|
@ -83,10 +89,13 @@ java::lang::Thread::initialize_native (void)
|
|||
// own finalizer then we will need to reinitialize this structure at
|
||||
// any "interesting" point.
|
||||
natThread *nt = (natThread *) _Jv_AllocBytes (sizeof (natThread));
|
||||
data = (jobject) nt;
|
||||
data = reinterpret_cast<gnu::gcj::RawData *> (nt);
|
||||
_Jv_MutexInit (&nt->interrupt_mutex);
|
||||
_Jv_CondInit (&nt->interrupt_cond);
|
||||
_Jv_ThreadInitData (&nt->thread, this);
|
||||
// FIXME: if JNI_ENV is set we will want to free it. It is
|
||||
// malloc()d.
|
||||
nt->jni_env = NULL;
|
||||
nt->joiner = 0;
|
||||
nt->next = 0;
|
||||
}
|
||||
|
@ -324,3 +333,20 @@ java::lang::Thread::yield (void)
|
|||
{
|
||||
_Jv_ThreadYield ();
|
||||
}
|
||||
|
||||
JNIEnv *
|
||||
_Jv_GetCurrentJNIEnv ()
|
||||
{
|
||||
java::lang::Thread *t = _Jv_ThreadCurrent ();
|
||||
if (t == NULL)
|
||||
return NULL;
|
||||
return ((natThread *) t->data)->jni_env;
|
||||
}
|
||||
|
||||
void
|
||||
_Jv_SetCurrentJNIEnv (JNIEnv *env)
|
||||
{
|
||||
java::lang::Thread *t = _Jv_ThreadCurrent ();
|
||||
JvAssert (t != NULL);
|
||||
((natThread *) t->data)->jni_env = env;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue