* src/threads/native/threads.h (native/include/java_lang_Thread.h): Removed.
authorMichael Starzinger <michi@complang.tuwien.ac.at>
Tue, 25 Sep 2007 22:23:55 +0000 (00:23 +0200)
committerMichael Starzinger <michi@complang.tuwien.ac.at>
Tue, 25 Sep 2007 22:23:55 +0000 (00:23 +0200)
(threadobject): The object pointer is of type java_object_t now.

* src/threads/native/threads.c: Adapted to above changes and use LLNI macros.

* src/threads/threads-common.h (threads_thread_start): Changed signature to not
use java_lang_Thread anymore.

* src/threads/threads-common.c: Adapted to above changes and use LLNI macros.
(threads_preinit): Fixed corruption of mainthread->flags.

src/threads/native/threads.c
src/threads/native/threads.h
src/threads/threads-common.c
src/threads/threads-common.h

index 1ffba31c2f30d1ebeb6ef7cf9e650d0acf4ab571..bdb5d08865bf9dab372af47f846c302a963cc344 100644 (file)
@@ -929,7 +929,7 @@ bool threads_init(void)
 
        /* set the object in the internal data structure */
 
-       mainthread->object = t;
+       mainthread->object = LLNI_DIRECT(t);
 
 #if defined(ENABLE_INTRP)
        /* create interpreter stack */
@@ -1073,6 +1073,7 @@ static void *threads_startup_thread(void *arg)
 {
        startupinfo        *startup;
        threadobject       *thread;
+       java_lang_Thread   *object;
 #if defined(WITH_CLASSPATH_GNU)
        java_lang_VMThread *vmt;
 #endif
@@ -1117,9 +1118,13 @@ static void *threads_startup_thread(void *arg)
 
        threads_set_current_threadobject(thread);
 
+       /* get the java.lang.Thread object for this thread */
+
+       object = (java_lang_Thread *) LLNI_WRAP(thread->object);
+
        /* set our priority */
 
-       threads_set_thread_priority(thread->tid, LLNI_field_direct(thread->object, priority));
+       threads_set_thread_priority(thread->tid, LLNI_field_direct(object, priority));
 
        /* thread is completely initialized */
 
@@ -1163,7 +1168,7 @@ static void *threads_startup_thread(void *arg)
 
                c = class_java_lang_VMThread;
 #elif defined(WITH_CLASSPATH_SUN) || defined(WITH_CLASSPATH_CLDC1_1)
-               c = thread->object->header.vftbl->class;
+               LLNI_class_get(object, c);
 #else
 # error unknown classpath configuration
 #endif
@@ -1186,11 +1191,11 @@ static void *threads_startup_thread(void *arg)
 #if defined(WITH_CLASSPATH_GNU)
                /* we need to start the run method of java.lang.VMThread */
 
-               vmt = (java_lang_VMThread *) LLNI_field_direct(thread->object, vmThread);
+               LLNI_field_get_ref(object, vmThread, vmt);
                o   = (java_handle_t *) vmt;
 
 #elif defined(WITH_CLASSPATH_SUN) || defined(WITH_CLASSPATH_CLDC1_1)
-               o   = (java_handle_t *) thread->object;
+               o   = (java_handle_t *) object;
 #else
 # error unknown classpath configuration
 #endif
@@ -1364,6 +1369,7 @@ bool threads_attach_current_thread(JavaVMAttachArgs *vm_aargs, bool isdaemon)
 #if defined(ENABLE_JAVASE)
        java_lang_ThreadGroup *group;
        threadobject          *mainthread;
+       java_lang_Thread      *mainthreado;
        classinfo             *c;
        methodinfo            *m;
 #endif
@@ -1402,7 +1408,7 @@ bool threads_attach_current_thread(JavaVMAttachArgs *vm_aargs, bool isdaemon)
        if (t == NULL)
                return false;
 
-       thread->object = t;
+       thread->object = LLNI_DIRECT(t);
 
        /* thread is completely initialized */
 
@@ -1464,7 +1470,8 @@ bool threads_attach_current_thread(JavaVMAttachArgs *vm_aargs, bool isdaemon)
                /* get the main thread */
 
                mainthread = threads_list_first();
-               group = LLNI_field_direct(mainthread->object, group);
+               mainthreado = (java_lang_Thread *) LLNI_WRAP(mainthread->object);
+               group = LLNI_field_direct(mainthreado, group);
 #endif
        }
 
@@ -1474,7 +1481,7 @@ bool threads_attach_current_thread(JavaVMAttachArgs *vm_aargs, bool isdaemon)
 
        /* for convenience */
 
-       o = (java_handle_t *) thread->object;
+       o = (java_handle_t *) t;
 
 #if defined(WITH_CLASSPATH_GNU)
        (void) vm_call_method(method_thread_init, o, vmt, s, NORM_PRIORITY,
@@ -1489,7 +1496,7 @@ bool threads_attach_current_thread(JavaVMAttachArgs *vm_aargs, bool isdaemon)
 #if defined(ENABLE_JAVASE)
        /* store the thread group in the object */
 
-       LLNI_field_direct(thread->object, group) = group;
+       LLNI_field_set_ref(t, group, group);
 
        /* add thread to given thread-group */
 
@@ -1532,9 +1539,9 @@ bool threads_detach_thread(threadobject *t)
 #endif
 
 #if defined(ENABLE_JAVASE)
-       object = t->object;
+       object = (java_lang_Thread *) LLNI_WRAP(t->object);
 
-       group = LLNI_field_direct(object, group);
+       LLNI_field_get_ref(object, group, group);
 
     /* If there's an uncaught exception, call uncaughtException on the
        thread's exception handler, or the thread's group if this is
@@ -1548,9 +1555,9 @@ bool threads_detach_thread(threadobject *t)
                   file. */
 
 # if defined(WITH_CLASSPATH_GNU)
-               handler = (java_lang_Object *) LLNI_field_direct(object, exceptionHandler);
+               LLNI_field_get_ref(object, exceptionHandler, handler);
 # elif defined(WITH_CLASSPATH_SUN)
-               handler = (java_lang_Object *) LLNI_field_direct(object, uncaughtExceptionHandler);
+               LLNI_field_get_ref(object, uncaughtExceptionHandler, handler);
 # endif
 
                if (handler != NULL) {
index 0a7fcabd893a0e538b25ad524a4b284a7d5b11fd..060c29eb0bce32caca50bd28530b9581c58f465b 100644 (file)
@@ -43,7 +43,6 @@ typedef struct threadobject threadobject;
 #include "mm/memory.h"
 #include "native/jni.h"
 #include "native/localref.h"
-#include "native/include/java_lang_Thread.h"
 
 #include "threads/native/lock.h"
 
@@ -109,7 +108,7 @@ extern pthread_key_t threads_current_threadobject_key;
 
 
 struct threadobject {
-       java_lang_Thread     *object;       /* link to java.lang.Thread object    */
+       java_object_t        *object;       /* link to java.lang.Thread object    */
 
        ptrint                thinlock;     /* pre-computed thin lock value       */
 
index 4701627d6606d8a49c51a7d1b4bee9f11db56757..39f49418d842bdaa10d2064704611a61637ae148 100644 (file)
@@ -153,7 +153,7 @@ void threads_preinit(void)
 
        /* thread is a Java thread and running */
 
-       mainthread->flags = THREAD_FLAG_JAVA;
+       mainthread->flags |= THREAD_FLAG_JAVA;
        mainthread->state = THREAD_STATE_RUNNABLE;
 
        /* store the internal thread data-structure in the TSD */
@@ -453,7 +453,7 @@ bool threads_thread_start_internal(utf *name, functionptr f)
        LLNI_field_set_val(object, vm_thread, (java_lang_Object *) t);
 #endif
 
-       t->object = object;
+       t->object = LLNI_DIRECT(object);
 
        /* set java.lang.Thread fields */
 
@@ -491,13 +491,16 @@ bool threads_thread_start_internal(utf *name, functionptr f)
 
 *******************************************************************************/
 
-void threads_thread_start(java_lang_Thread *object)
+void threads_thread_start(java_handle_t *object)
 {
-       threadobject *thread;
+       java_lang_Thread   *o;
+       threadobject       *thread;
 #if defined(WITH_CLASSPATH_GNU)
        java_lang_VMThread *vmt;
 #endif
 
+       o = (java_lang_Thread *) object;
+
        /* Enter the join-mutex, so if the main-thread is currently
           waiting to join all threads, the number of non-daemon threads
           is correct. */
@@ -515,7 +518,7 @@ void threads_thread_start(java_lang_Thread *object)
 #if defined(ENABLE_JAVASE)
        /* is this a daemon thread? */
 
-       if (LLNI_field_direct(object, daemon) == true)
+       if (LLNI_field_direct(o, daemon) == true)
                thread->flags |= THREAD_FLAG_DAEMON;
 #endif
 
@@ -526,17 +529,17 @@ void threads_thread_start(java_lang_Thread *object)
 
        /* link the two objects together */
 
-       thread->object = object;
+       thread->object = LLNI_DIRECT(object);
 
 #if defined(WITH_CLASSPATH_GNU)
-       LLNI_field_get_ref(object, vmThread, vmt);
+       LLNI_field_get_ref(o, vmThread, vmt);
 
        assert(vmt);
        assert(LLNI_field_direct(vmt, vmdata) == NULL);
 
        LLNI_field_set_val(vmt, vmdata, (java_lang_Object *) thread);
 #elif defined(WITH_CLASSPATH_CLDC1_1)
-       LLNI_field_set_val(object, vm_thread, (java_lang_Object *) thread);
+       LLNI_field_set_val(o, vm_thread, (java_lang_Object *) thread);
 #endif
 
        /* Start the thread.  Don't pass a function pointer (NULL) since
@@ -564,7 +567,7 @@ void threads_thread_print_info(threadobject *t)
 
        /* the thread may be currently in initalization, don't print it */
 
-       object = t->object;
+       object = (java_lang_Thread *) LLNI_WRAP(t->object);
 
        if (object != NULL) {
                /* get thread name */
index 54b5e0d418c79db4877d48623af326c6c6c604da..7e388ed3fa10bf6e8a01db8751e28b3ae81f06ed 100644 (file)
@@ -83,7 +83,7 @@ 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_lang_Thread *object);
+void          threads_thread_start(java_handle_t *object);
 
 void          threads_thread_print_info(threadobject *t);