* src/vm/class.c [ENABLE_JAVASE] (arrayclass_java_lang_Object): Added
[cacao.git] / src / vm / finalizer.c
index b0ac3c91dbb6050b8aa9e3c92cc5bceda1cbccfe..7f9632bd89792b42109f0115cdd6499aee900bec 100644 (file)
@@ -26,9 +26,7 @@
 
    Authors: Christian Thalinger
 
-   Changes:
-
-   $Id: finalizer.c 4874 2006-05-05 14:36:18Z edwin $
+   $Id: finalizer.c 6251 2006-12-27 23:15:56Z twisti $
 
 */
 
 #include "mm/memory.h"
 #include "native/jni.h"
 #include "native/include/java_lang_Thread.h"
-#include "native/include/java_lang_VMThread.h"
+
+#if defined(WITH_CLASSPATH_GNU)
+# include "native/include/java_lang_VMThread.h"
+#endif
+
+#if defined(ENABLE_THREADS)
+# include "threads/native/lock.h"
+#endif
+
 #include "vm/builtin.h"
 #include "vm/exceptions.h"
 #include "vm/global.h"
@@ -54,9 +60,9 @@
 
 /* global variables ***********************************************************/
 
-#if defined(USE_THREADS)
-static java_lang_VMThread *finalizer_vmthread;
-static java_objectheader *lock_finalizer_thread;
+#if defined(ENABLE_THREADS)
+static threadobject      *thread_finalizer;
+static java_objectheader *lock_thread_finalizer;
 #endif
 
 
@@ -68,12 +74,10 @@ static java_objectheader *lock_finalizer_thread;
 
 bool finalizer_init(void)
 {
-#if defined(USE_THREADS)
-       lock_finalizer_thread = NEW(java_objectheader);
+#if defined(ENABLE_THREADS)
+       lock_thread_finalizer = NEW(java_objectheader);
 
-# if defined(NATIVE_THREADS)
-       initObjectLock(lock_finalizer_thread);
-# endif
+       lock_init_object_lock(lock_thread_finalizer);
 #endif
 
        /* everything's ok */
@@ -90,21 +94,21 @@ bool finalizer_init(void)
 
 *******************************************************************************/
 
-#if defined(USE_THREADS)
+#if defined(ENABLE_THREADS)
 static void finalizer_thread(void)
 {
        while (true) {
                /* get the lock on the finalizer lock object, so we can call wait */
 
-               builtin_monitorenter(lock_finalizer_thread);
+               lock_monitor_enter(lock_thread_finalizer);
 
                /* wait forever (0, 0) on that object till we are signaled */
        
-               wait_cond_for_object(lock_finalizer_thread, 0, 0);
+               lock_wait_for_object(lock_thread_finalizer, 0, 0);
 
                /* leave the lock */
 
-               builtin_monitorexit(lock_finalizer_thread);
+               lock_monitor_exit(lock_thread_finalizer);
 
                /* and call the finalizers */
 
@@ -120,31 +124,39 @@ static void finalizer_thread(void)
 
 *******************************************************************************/
 
-#if defined(USE_THREADS)
+#if defined(ENABLE_THREADS)
 bool finalizer_start_thread(void)
 {
-       java_lang_Thread *t;
+#if defined(WITH_CLASSPATH_GNU)
+       java_lang_VMThread *vmt;
+#endif
 
        /* create the finalizer object */
 
-       finalizer_vmthread =
-               (java_lang_VMThread *) builtin_new(class_java_lang_VMThread);
+       thread_finalizer = (threadobject *) builtin_new(class_java_lang_Thread);
 
-       if (!finalizer_vmthread)
+       if (thread_finalizer == NULL)
                return false;
 
-       t = (java_lang_Thread *) builtin_new(class_java_lang_Thread);
+#if defined(WITH_CLASSPATH_GNU)
+       vmt = (java_lang_VMThread *) builtin_new(class_java_lang_VMThread);
+
+       vmt->thread = (java_lang_Thread *) thread_finalizer;
 
-       t->vmThread = finalizer_vmthread;
-       t->name     = javastring_new_from_ascii("Finalizer");
-       t->daemon   = true;
-       t->priority = 5;
+       thread_finalizer->o.vmThread = vmt;
+#endif
 
-       finalizer_vmthread->thread = t;
+       thread_finalizer->flags      = THREAD_FLAG_DAEMON;
+
+       thread_finalizer->o.name     = javastring_new_from_ascii("Finalizer");
+#if defined(ENABLE_JAVASE)
+       thread_finalizer->o.daemon   = true;
+#endif
+       thread_finalizer->o.priority = 5;
 
        /* actually start the finalizer thread */
 
-       threads_start_thread(t, finalizer_thread);
+       threads_start_thread(thread_finalizer, finalizer_thread);
 
        /* everything's ok */
 
@@ -162,18 +174,18 @@ bool finalizer_start_thread(void)
 
 void finalizer_notify(void)
 {
-#if defined(USE_THREADS)
+#if defined(ENABLE_THREADS)
        /* get the lock on the finalizer lock object, so we can call wait */
 
-       builtin_monitorenter(lock_finalizer_thread);
+       lock_monitor_enter(lock_thread_finalizer);
 
        /* signal the finalizer thread */
        
-       signal_cond_for_object(lock_finalizer_thread);
+       lock_notify_object(lock_thread_finalizer);
 
        /* leave the lock */
 
-       builtin_monitorexit(lock_finalizer_thread);
+       lock_monitor_exit(lock_thread_finalizer);
 #else
        /* if we don't have threads, just run the finalizers */