X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fnative%2Fvm%2FVMThread.c;h=dd179e82dc479d89caadc50da153297d49b0bcb2;hb=d75b6037acf17c342166b9c9bd6e657dfdd12cd9;hp=a6f266f0f66dea12c41c9ade276fb8a4beae53ba;hpb=9df2bcaa5c50904777635c1afb45527e71a9c2d2;p=cacao.git diff --git a/src/native/vm/VMThread.c b/src/native/vm/VMThread.c index a6f266f0f..dd179e82d 100644 --- a/src/native/vm/VMThread.c +++ b/src/native/vm/VMThread.c @@ -1,9 +1,9 @@ -/* nat/Thread.c - java/lang/Thread +/* native/vm/VMThread.c - java/lang/VMThread - Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 - R. Grafl, A. Krall, C. Kruegel, C. Oates, R. Obermaisser, - M. Probst, S. Ring, E. Steiner, C. Thalinger, D. Thuernbeck, - P. Tomsich, J. Wenninger + Copyright (C) 1996-2005 R. Grafl, A. Krall, C. Kruegel, C. Oates, + R. Obermaisser, M. Platter, M. Probst, S. Ring, E. Steiner, + C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich, J. Wenninger, + Institut f. Computersprachen - TU Wien This file is part of CACAO. @@ -28,23 +28,34 @@ Changes: Joseph Wenninger - $Id: VMThread.c 1067 2004-05-18 10:25:51Z stefan $ + $Id: VMThread.c 1735 2004-12-07 14:33:27Z twisti $ */ -#include "jni.h" -#include "builtin.h" +#include "config.h" #include "types.h" -#include "native.h" -#include "loader.h" -#include "tables.h" -#include "threads/thread.h" +#include "native/jni.h" +#include "native/native.h" +#include "native/include/java_lang_ThreadGroup.h" +#include "native/include/java_lang_Object.h" /* java_lang_Thread.h */ +#include "native/include/java_lang_Throwable.h" /* java_lang_Thread.h */ +#include "native/include/java_lang_VMThread.h" +#include "native/include/java_lang_Thread.h" + +#if defined(USE_THREADS) +# if defined(NATIVE_THREADS) +# include "threads/native/threads.h" +# else +# include "threads/green/threads.h" +# endif +#endif + #include "toolbox/logging.h" -#include "java_lang_ThreadGroup.h" -#include "java_lang_Object.h" /* needed for java_lang_Thread.h */ -#include "java_lang_Throwable.h" /* needed for java_lang_Thread.h */ -#include "java_lang_Thread.h" +#include "vm/builtin.h" +#include "vm/exceptions.h" +#include "vm/options.h" +#include "vm/tables.h" /* @@ -52,9 +63,9 @@ * Method: countStackFrames * Signature: ()I */ -JNIEXPORT s4 JNICALL Java_java_lang_Thread_countStackFrames(JNIEnv *env, java_lang_Thread *this) +JNIEXPORT s4 JNICALL Java_java_lang_VMThread_countStackFrames(JNIEnv *env, java_lang_VMThread *this) { - log_text("java_lang_Thread_countStackFrames called"); + log_text("java_lang_VMThread_countStackFrames called"); return 0; } @@ -64,22 +75,22 @@ JNIEXPORT s4 JNICALL Java_java_lang_Thread_countStackFrames(JNIEnv *env, java_la * Method: currentThread * Signature: ()Ljava/lang/Thread; */ -JNIEXPORT java_lang_Thread* JNICALL Java_java_lang_Thread_currentThread(JNIEnv *env, jclass clazz) +JNIEXPORT java_lang_Thread* JNICALL Java_java_lang_VMThread_currentThread(JNIEnv *env, jclass clazz) { java_lang_Thread *t; if (runverbose) - log_text("java_lang_Thread_currentThread called"); + log_text("java_lang_VMThread_currentThread called"); #if defined(USE_THREADS) #if !defined(NATIVE_THREADS) t = (java_lang_Thread *) currentThread; #else - t = THREADOBJECT; + t = ((threadobject*) THREADOBJECT)->o.thread; #endif if (!t->group) { - log_text("java_lang_Thread_currentThread: t->group=NULL"); + log_text("java_lang_VMThread_currentThread: t->group=NULL"); /* ThreadGroup of currentThread is not initialized */ t->group = (java_lang_ThreadGroup *) @@ -89,7 +100,7 @@ JNIEXPORT java_lang_Thread* JNICALL Java_java_lang_Thread_currentThread(JNIEnv * log_text("unable to create ThreadGroup"); } - return (java_lang_Thread *) t; + return t; #else return 0; #endif @@ -101,9 +112,13 @@ JNIEXPORT java_lang_Thread* JNICALL Java_java_lang_Thread_currentThread(JNIEnv * * Method: nativeInterrupt * Signature: ()V */ -JNIEXPORT void JNICALL Java_java_lang_Thread_nativeInterrupt(JNIEnv *env, java_lang_Thread *this) +JNIEXPORT void JNICALL Java_java_lang_VMThread_interrupt(JNIEnv *env, java_lang_VMThread *this) { - log_text("Java_java_lang_Thread_interrupt0 called"); +#if defined(USE_THREADS) && defined(NATIVE_THREADS) + interruptThread(this); +#else + log_text("Java_java_lang_VMThread_interrupt0 called"); +#endif } @@ -112,14 +127,23 @@ JNIEXPORT void JNICALL Java_java_lang_Thread_nativeInterrupt(JNIEnv *env, java_l * Method: isAlive * Signature: ()Z */ -JNIEXPORT s4 JNICALL Java_java_lang_Thread_isAlive(JNIEnv *env, java_lang_Thread *this) +JNIEXPORT s4 JNICALL Java_java_lang_VMThread_isAlive(JNIEnv *env, java_lang_VMThread *this) { if (runverbose) - log_text("java_lang_Thread_isAlive called"); + log_text("java_lang_VMThread_isAlive called"); #if defined(USE_THREADS) - return aliveThread((thread *) this); +#if !defined(NATIVE_THREADS) + return aliveThread((thread *) this->thread); +#else + /* This method is implemented in classpath. */ + throw_cacao_exception_exit(string_java_lang_InternalError, "aliveThread"); #endif +#endif + + /* keep compiler happy */ + + return 0; } @@ -129,10 +153,14 @@ JNIEXPORT s4 JNICALL Java_java_lang_Thread_isAlive(JNIEnv *env, java_lang_Thread * Method: isInterrupted * Signature: ()Z */ -JNIEXPORT s4 JNICALL Java_java_lang_Thread_isInterrupted(JNIEnv *env, java_lang_Thread *this) +JNIEXPORT s4 JNICALL Java_java_lang_VMThread_isInterrupted(JNIEnv *env, java_lang_VMThread *this) { - log_text("Java_java_lang_Thread_isInterrupted called"); +#if defined(USE_THREADS) && defined(NATIVE_THREADS) + return isInterruptedThread(this); +#else + log_text("Java_java_lang_VMThread_isInterrupted called"); return 0; +#endif } @@ -141,7 +169,7 @@ JNIEXPORT s4 JNICALL Java_java_lang_Thread_isInterrupted(JNIEnv *env, java_lang_ * Method: registerNatives * Signature: ()V */ -JNIEXPORT void JNICALL Java_java_lang_Thread_registerNatives(JNIEnv *env, jclass clazz) +JNIEXPORT void JNICALL Java_java_lang_VMThread_registerNatives(JNIEnv *env, jclass clazz) { /* empty */ } @@ -152,13 +180,13 @@ JNIEXPORT void JNICALL Java_java_lang_Thread_registerNatives(JNIEnv *env, jclass * Method: resume0 * Signature: ()V */ -JNIEXPORT void JNICALL Java_java_lang_Thread_nativeResume(JNIEnv *env, java_lang_Thread *this) +JNIEXPORT void JNICALL Java_java_lang_VMThread_resume(JNIEnv *env, java_lang_VMThread *this) { if (runverbose) - log_text("java_lang_Thread_resume0 called"); + log_text("java_lang_VMThread_resume0 called"); #if defined(USE_THREADS) && !defined(NATIVE_THREADS) - resumeThread((thread *) this); + resumeThread((thread *) this->thread); #endif } @@ -168,13 +196,13 @@ JNIEXPORT void JNICALL Java_java_lang_Thread_nativeResume(JNIEnv *env, java_lang * Method: setPriority0 * Signature: (I)V */ -JNIEXPORT void JNICALL Java_java_lang_Thread_nativeSetPriority(JNIEnv *env, java_lang_Thread *this, s4 par1) +JNIEXPORT void JNICALL Java_java_lang_VMThread_nativeSetPriority(JNIEnv *env, java_lang_VMThread *this, s4 par1) { if (runverbose) - log_text("java_lang_Thread_setPriority0 called"); + log_text("java_lang_VMThread_setPriority0 called"); -#if defined(USE_THREADS) && !defined(NATIVE_THREADS) - setPriorityThread((thread *) this, par1); +#if defined(USE_THREADS) + setPriorityThread((thread *) this->thread, par1); #endif } @@ -184,13 +212,10 @@ JNIEXPORT void JNICALL Java_java_lang_Thread_nativeSetPriority(JNIEnv *env, java * Method: sleep * Signature: (JI)V */ -JNIEXPORT void JNICALL Java_java_lang_Thread_sleep(JNIEnv *env, jclass clazz, s8 millis, s4 par2) +JNIEXPORT void JNICALL Java_java_lang_VMThread_sleep(JNIEnv *env, jclass clazz, s8 millis, s4 nanos) { - if (runverbose) - log_text("java_lang_Thread_sleep called"); - #if defined(USE_THREADS) - sleepThread(millis); + sleepThread(millis, nanos); #endif } @@ -200,13 +225,14 @@ JNIEXPORT void JNICALL Java_java_lang_Thread_sleep(JNIEnv *env, jclass clazz, s8 * Method: start * Signature: ()V */ -JNIEXPORT void JNICALL Java_java_lang_Thread_start(JNIEnv *env, java_lang_Thread *this) +JNIEXPORT void JNICALL Java_java_lang_VMThread_start(JNIEnv *env, java_lang_VMThread *this, s8 par1) { if (runverbose) - log_text("java_lang_Thread_start called"); + log_text("java_lang_VMThread_start called"); #if defined(USE_THREADS) - startThread((thread*)this); + this->thread->vmThread = this; + startThread((thread *) this->thread); #endif } @@ -216,14 +242,14 @@ JNIEXPORT void JNICALL Java_java_lang_Thread_start(JNIEnv *env, java_lang_Thread * Method: stop0 * Signature: (Ljava/lang/Object;)V */ -JNIEXPORT void JNICALL Java_java_lang_Thread_nativeStop(JNIEnv *env, java_lang_Thread *this, java_lang_Throwable *par1) +JNIEXPORT void JNICALL Java_java_lang_VMThread_nativeStop(JNIEnv *env, java_lang_VMThread *this, java_lang_Throwable *par1) { if (runverbose) - log_text ("java_lang_Thread_stop0 called"); + log_text ("java_lang_VMThread_stop0 called"); #if defined(USE_THREADS) && !defined(NATIVE_THREADS) - if (currentThread == (thread*)this) { + if (currentThread == (thread*)this->thread) { log_text("killing"); killThread(0); /* @@ -232,8 +258,8 @@ JNIEXPORT void JNICALL Java_java_lang_Thread_nativeStop(JNIEnv *env, java_lang_T */ } else { - CONTEXT((thread*)this).flags |= THREAD_FLAGS_KILLED; - resumeThread((thread*)this); + /*CONTEXT((thread*)this)*/ this->flags |= THREAD_FLAGS_KILLED; + resumeThread((thread*)this->thread); } #endif } @@ -244,13 +270,13 @@ JNIEXPORT void JNICALL Java_java_lang_Thread_nativeStop(JNIEnv *env, java_lang_T * Method: suspend0 * Signature: ()V */ -JNIEXPORT void JNICALL Java_java_lang_Thread_nativeSuspend(JNIEnv *env, java_lang_Thread *this) +JNIEXPORT void JNICALL Java_java_lang_VMThread_suspend(JNIEnv *env, java_lang_VMThread *this) { if (runverbose) - log_text("java_lang_Thread_suspend0 called"); + log_text("java_lang_VMThread_suspend0 called"); #if defined(USE_THREADS) && !defined(NATIVE_THREADS) - suspendThread((thread*)this); + suspendThread((thread*)this->thread); #endif } @@ -260,10 +286,10 @@ JNIEXPORT void JNICALL Java_java_lang_Thread_nativeSuspend(JNIEnv *env, java_lan * Method: yield * Signature: ()V */ -JNIEXPORT void JNICALL Java_java_lang_Thread_yield(JNIEnv *env, jclass clazz) +JNIEXPORT void JNICALL Java_java_lang_VMThread_yield(JNIEnv *env, jclass clazz) { if (runverbose) - log_text("java_lang_Thread_yield called"); + log_text("java_lang_VMThread_yield called"); #if defined(USE_THREADS) yieldThread(); @@ -276,11 +302,14 @@ JNIEXPORT void JNICALL Java_java_lang_Thread_yield(JNIEnv *env, jclass clazz) * Method: interrupted * Signature: ()Z */ -JNIEXPORT s4 JNICALL Java_java_lang_Thread_interrupted(JNIEnv *env, jclass clazz) +JNIEXPORT s4 JNICALL Java_java_lang_VMThread_interrupted(JNIEnv *env, jclass clazz) { - log_text("Java_java_lang_Thread_interrupted"); - +#if defined(USE_THREADS) && defined(NATIVE_THREADS) + return interruptedThread(); +#else + log_text("Java_java_lang_VMThread_interrupted"); return 0; +#endif } @@ -289,7 +318,7 @@ JNIEXPORT s4 JNICALL Java_java_lang_Thread_interrupted(JNIEnv *env, jclass clazz * Method: nativeInit * Signature: (J)V */ -JNIEXPORT void JNICALL Java_java_lang_Thread_nativeInit(JNIEnv *env, java_lang_Thread *this, s8 par1) +JNIEXPORT void JNICALL Java_java_lang_VMThread_nativeInit(JNIEnv *env, java_lang_VMThread *this, s8 par1) { /* if (*exceptionptr) @@ -298,18 +327,23 @@ JNIEXPORT void JNICALL Java_java_lang_Thread_nativeInit(JNIEnv *env, java_lang_T #if defined(USE_THREADS) && defined(NATIVE_THREADS) initThread(this); #endif - this->priority = 5; } /* - * Class: java_lang_Thread + * Class: java/lang/VMThread * Method: holdsLock * Signature: (Ljava/lang/Object;)Z */ -JNIEXPORT s4 JNICALL Java_java_lang_Thread_holdsLock(JNIEnv *env, jclass clazz, java_lang_Object *par1) +JNIEXPORT s4 JNICALL Java_java_lang_VMThread_holdsLock(JNIEnv *env, jclass clazz, java_lang_Object* o) { +#if defined(USE_THREADS) && defined(NATIVE_THREADS) + return threadHoldsLock((threadobject*) THREADOBJECT, + (java_objectheader *) o); +#else + /* I don't know how to find out [stefan] */ return 0; +#endif }