diff options
author | Tom Tromey <tromey@cygnus.com> | 2000-02-10 20:31:48 +0000 |
---|---|---|
committer | Tom Tromey <tromey@gcc.gnu.org> | 2000-02-10 20:31:48 +0000 |
commit | aaf0766e9f897b2fbce053083d85cb739cb509d2 (patch) | |
tree | 893852baae8ef6aa653f36d94ed11d6728aa30ea /libjava/java/lang | |
parent | ef86eabb6c290a9d77d74d63f2b5041a096841d9 (diff) | |
download | gcc-aaf0766e9f897b2fbce053083d85cb739cb509d2.zip gcc-aaf0766e9f897b2fbce053083d85cb739cb509d2.tar.gz gcc-aaf0766e9f897b2fbce053083d85cb739cb509d2.tar.bz2 |
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
Diffstat (limited to 'libjava/java/lang')
-rw-r--r-- | libjava/java/lang/Thread.java | 11 | ||||
-rw-r--r-- | libjava/java/lang/natThread.cc | 30 |
2 files changed, 33 insertions, 8 deletions
diff --git a/libjava/java/lang/Thread.java b/libjava/java/lang/Thread.java index 3492167..7dbabcf 100644 --- a/libjava/java/lang/Thread.java +++ b/libjava/java/lang/Thread.java @@ -1,6 +1,6 @@ // Thread.java - Thread class. -/* Copyright (C) 1998, 1999 Red Hat, Inc. +/* Copyright (C) 1998, 1999, 2000 Red Hat, Inc. This file is part of libgcj. @@ -10,6 +10,8 @@ details. */ package java.lang; +import gnu.gcj.RawData; + /** * @author Tom Tromey <tromey@cygnus.com> * @date August 24, 1998 @@ -297,11 +299,8 @@ public class Thread implements Runnable private boolean interrupt_flag; private boolean alive_flag; - // This is a bit odd. We need a way to represent some data that is - // manipulated only by the native side of this class. We represent - // it as a Java object reference. However, it is not actually a - // Java object. - private Object data; + // Our native data. + private RawData data; // Next thread number to assign. private static int nextThreadNumber = 0; diff --git a/libjava/java/lang/natThread.cc b/libjava/java/lang/natThread.cc index 6870f02..741f2b5 100644 --- a/libjava/java/lang/natThread.cc +++ b/libjava/java/lang/natThread.cc @@ -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; +} |