X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=src%2Fthreads%2Fthreads-common.h;h=4d0ce24e8a30b0835e2bee68ea12c72b022d8bb0;hb=b63e8aecc697c9c0f904b811488ee9835f597e96;hp=c0d589b99248315f5d81f33c11837040d3cf1bbb;hpb=e95e3835a8385aca3a4d6a15d5c695acf4353c65;p=cacao.git diff --git a/src/threads/threads-common.h b/src/threads/threads-common.h index c0d589b99..4d0ce24e8 100644 --- a/src/threads/threads-common.h +++ b/src/threads/threads-common.h @@ -1,9 +1,7 @@ /* src/threads/threads-common.h - machine independent thread functions - Copyright (C) 2007 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 + Copyright (C) 2007, 2008 + CACAOVM - Verein zur Foerderung der freien virtuellen Maschine CACAO This file is part of CACAO. @@ -22,8 +20,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - $Id: threads-common.h 7825 2007-04-25 20:31:57Z twisti $ - */ @@ -35,7 +31,7 @@ #include "vm/global.h" -#include "native/jni.h" +#include "native/llni.h" #if defined(ENABLE_THREADS) # include "threads/native/threads.h" @@ -67,18 +63,105 @@ #define MAX_PRIORITY 10 +/* debug **********************************************************************/ + +#if !defined(NDEBUG) +# define DEBUGTHREADS(message, thread) \ + do { \ + if (opt_DebugThreads) { \ + printf("[Thread %-16s: ", message); \ + threads_thread_print_info(thread); \ + printf("]\n"); \ + } \ + } while (0) +#else +# define DEBUGTHREADS(message, thread) +#endif + + +#if defined(__LINUX__) +/* XXX Remove for exact-GC. */ +extern bool threads_pthreads_implementation_nptl; +#endif + + +/* inline functions ***********************************************************/ + +/* threads_thread_get_object *************************************************** + + Return the java.lang.Thread object for the given thread. + +*******************************************************************************/ + +static inline java_handle_t *threads_thread_get_object(threadobject *t) +{ + return LLNI_WRAP(t->object); +} + + +/* threads_thread_set_object *************************************************** + + Set the java.lang.Thread object for the given thread. + +*******************************************************************************/ + +static inline void threads_thread_set_object(threadobject *t, java_handle_t *object) +{ + t->object = LLNI_DIRECT(object); +} + + /* function prototypes ********************************************************/ -threadobject *threads_create_thread(void); -threadobject *threads_thread_create_internal(utf *name); -void threads_start_javathread(void *vobject); +void threads_preinit(void); + +threadobject *threads_thread_new(void); +void threads_thread_free(threadobject *t); + +bool threads_thread_start_internal(utf *name, functionptr f); +void threads_thread_start(java_handle_t *object); + +void threads_thread_print_info(threadobject *t); + ptrint threads_get_current_tid(void); -utf *threads_thread_get_state(threadobject *thread); -bool threads_thread_is_alive(threadobject *thread); + +void threads_thread_state_runnable(threadobject *t); +void threads_thread_state_waiting(threadobject *t); +void threads_thread_state_timed_waiting(threadobject *t); +void threads_thread_state_terminated(threadobject *t); +utf *threads_thread_get_state(threadobject *t); + +bool threads_thread_is_alive(threadobject *t); + void threads_dump(void); void threads_thread_print_stacktrace(threadobject *thread); void threads_print_stacktrace(void); + +/* implementation specific functions */ + +void threads_impl_preinit(void); + +void threads_list_lock(void); +void threads_list_unlock(void); + +#if defined(ENABLE_GC_CACAO) +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_set_current_threadobject(threadobject *thread); +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_thread_start(threadobject *thread, functionptr f); + +void threads_yield(void); + #endif /* ENABLE_THREADS */ #endif /* _THREADS_COMMON_H */