X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=src%2Fthreads%2Fthread.hpp;h=25f7c9b2515b7f4b5083125831ff8a4e1c447b1b;hb=e6571845c0eb52b0f784d2b0b7a6af2233d237c4;hp=463cd370a0075458e1a03cb904e314ee8ec68d7a;hpb=5992773cad339da5011f9b6649306707188a6df8;p=cacao.git diff --git a/src/threads/thread.hpp b/src/threads/thread.hpp index 463cd370a..25f7c9b25 100644 --- a/src/threads/thread.hpp +++ b/src/threads/thread.hpp @@ -28,10 +28,6 @@ #include "config.h" -#ifdef __cplusplus -extern "C" { -#endif - #include "vm/types.h" // Include early to get threadobject. @@ -63,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 **********************************************************/ @@ -96,6 +94,10 @@ extern bool threads_pthreads_implementation_nptl; #endif +#ifdef __cplusplus +extern "C" { +#endif + /* inline functions ***********************************************************/ /* thread_get_object *********************************************************** @@ -190,67 +192,7 @@ inline static bool thread_is_attached(threadobject *t) o = thread_get_object(t); - 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; } @@ -269,10 +211,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; } @@ -289,16 +228,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); } @@ -326,14 +262,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 */ @@ -350,19 +287,23 @@ void threads_mutex_join_unlock(void); void threads_impl_thread_clear(threadobject *t); void threads_impl_thread_reuse(threadobject *t); -void threads_impl_thread_free(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); + /* * These are local overrides for various environment variables in Emacs.