X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=src%2Fthreads%2Fthread.hpp;h=30eee48f3f944cc525b4fc0bf822946af56f101b;hb=dd9e483108a6445825b7b0ec93bd58b6f3639983;hp=c6336c80afd59dcbdce6334b5adfb8c05529b545;hpb=032957bfb6cc84a4440fb6c3de972b15148b52b6;p=cacao.git diff --git a/src/threads/thread.hpp b/src/threads/thread.hpp index c6336c80a..30eee48f3 100644 --- a/src/threads/thread.hpp +++ b/src/threads/thread.hpp @@ -1,6 +1,6 @@ /* src/threads/thread.hpp - machine independent thread functions - Copyright (C) 2007, 2008 + Copyright (C) 1996-2011 CACAOVM - Verein zur Foerderung der freien virtuellen Maschine CACAO This file is part of CACAO. @@ -28,10 +28,6 @@ #include "config.h" -#ifdef __cplusplus -extern "C" { -#endif - #include "vm/types.h" // Include early to get threadobject. @@ -43,7 +39,6 @@ extern "C" { #include "vm/os.hpp" -#include "native/jni.h" #include "native/llni.h" #include "threads/mutex.hpp" @@ -64,6 +59,8 @@ extern "C" { #define THREAD_STATE_WAITING 3 #define THREAD_STATE_TIMED_WAITING 4 #define THREAD_STATE_TERMINATED 5 +#define THREAD_STATE_PARKED 6 +#define THREAD_STATE_TIMED_PARKED 7 /* thread priorities **********************************************************/ @@ -97,41 +94,11 @@ extern bool threads_pthreads_implementation_nptl; #endif -/* inline functions ***********************************************************/ - -/* thread_get_object *********************************************************** - - Return the Java for the given thread. - - ARGUMENTS: - t ... thread - - RETURN: - the Java object - -*******************************************************************************/ - -inline static java_handle_t *thread_get_object(threadobject *t) -{ - return LLNI_WRAP(t->object); -} - - -/* threads_thread_set_object *************************************************** - - Set the Java object for the given thread. - - ARGUMENTS: - t ... thread - o ... Java object - -*******************************************************************************/ - -inline static void thread_set_object(threadobject *t, java_handle_t *o) -{ - t->object = LLNI_DIRECT(o); -} +#ifdef __cplusplus +extern "C" { +#endif +/* inline functions ***********************************************************/ /* thread_get_current_object ************************************************** @@ -148,7 +115,7 @@ inline static java_handle_t *thread_get_current_object(void) java_handle_t *o; t = THREADOBJECT; - o = thread_get_object(t); + o = LLNI_WRAP(t->object); return o; } @@ -189,69 +156,9 @@ inline static bool thread_is_attached(threadobject *t) { java_handle_t *o; - o = thread_get_object(t); + o = LLNI_WRAP(t->object); - if (o != NULL) - return true; - else - return false; -} - - -/* thread_is_interrupted ******************************************************* - - Check if the given thread has been interrupted. - - ARGUMENTS: - t ... the thread to check - - RETURN VALUE: - true, if the given thread had been interrupted - -*******************************************************************************/ - -inline static bool thread_is_interrupted(threadobject *t) -{ - bool interrupted; - - /* We need the mutex because classpath will call this function when - a blocking system call is interrupted. The mutex ensures that it will - see the correct value for the interrupted flag. */ - -#ifdef __cplusplus - t->waitmutex->lock(); - interrupted = t->interrupted; - t->waitmutex->unlock(); -#else - Mutex_lock(t->waitmutex); - interrupted = t->interrupted; - Mutex_unlock(t->waitmutex); -#endif - - return interrupted; -} - - -/* thread_set_interrupted ****************************************************** - - Set the interrupted flag to the given value. - - ARGUMENTS: - interrupted ... value to set - -*******************************************************************************/ - -inline static void thread_set_interrupted(threadobject *t, bool interrupted) -{ -#ifdef __cplusplus - t->waitmutex->lock(); - t->interrupted = interrupted; - t->waitmutex->unlock(); -#else - Mutex_lock(t->waitmutex); - t->interrupted = interrupted; - Mutex_unlock(t->waitmutex); -#endif + return o != NULL; } @@ -270,10 +177,7 @@ inline static void thread_set_interrupted(threadobject *t, bool interrupted) inline static bool thread_is_daemon(threadobject *t) { - if (t->flags & THREAD_FLAG_DAEMON) - return true; - else - return false; + return (t->flags & THREAD_FLAG_DAEMON) != 0; } @@ -290,16 +194,13 @@ inline static bool thread_is_daemon(threadobject *t) inline static bool thread_current_is_attached(void) { threadobject *t; - bool result; t = thread_get_current(); if (t == NULL) return false; - result = thread_is_attached(t); - - return result; + return thread_is_attached(t); } @@ -327,14 +228,15 @@ intptr_t threads_get_current_tid(void); void thread_set_state_runnable(threadobject *t); void thread_set_state_waiting(threadobject *t); void thread_set_state_timed_waiting(threadobject *t); +void thread_set_state_parked(threadobject *t); +void thread_set_state_timed_parked(threadobject *t); void thread_set_state_terminated(threadobject *t); threadobject *thread_get_thread(java_handle_t *h); bool threads_thread_is_alive(threadobject *t); - -void threads_dump(void); - +bool thread_is_interrupted(threadobject *t); +void thread_set_interrupted(threadobject *t, bool interrupted); /* implementation specific functions */ @@ -346,25 +248,34 @@ void threads_mutex_gc_lock(void); void threads_mutex_gc_unlock(void); #endif -void threads_mutex_join_lock(void); -void threads_mutex_join_unlock(void); - -void threads_impl_thread_init(threadobject *t); void threads_impl_thread_clear(threadobject *t); void threads_impl_thread_reuse(threadobject *t); -void threads_impl_thread_free(threadobject *t); +void threads_impl_clear_heap_pointers(threadobject *t); void threads_impl_thread_start(threadobject *thread, functionptr f); void threads_yield(void); -#endif /* ENABLE_THREADS */ - #ifdef __cplusplus } #endif +#endif /* ENABLE_THREADS */ + #endif // _THREAD_HPP +void thread_handle_set_priority(java_handle_t *th, int); +bool thread_handle_is_interrupted(java_handle_t *th); +void thread_handle_interrupt(java_handle_t *th); +int thread_handle_get_state(java_handle_t *th); + +#if defined(WITH_JAVA_RUNTIME_LIBRARY_GNU_CLASSPATH) +#include "thread-classpath.hpp" +#elif defined(WITH_JAVA_RUNTIME_LIBRARY_OPENJDK) +#include "thread-openjdk.hpp" +#elif defined(WITH_JAVA_RUNTIME_LIBRARY_CLDC1_1) +#include "thread-cldc11.hpp" +#endif + /* * These are local overrides for various environment variables in Emacs.