* Removed all Id tags.
[cacao.git] / src / vm / finalizer.c
index 0c662ea2d41dc50e2c91be0f4f762ceb63572bea..4716be0b12dba1a199b0afbb746947cb032cb6f4 100644 (file)
@@ -1,6 +1,6 @@
 /* src/vm/finalizer.c - finalizer linked list and thread
 
-   Copyright (C) 1996-2005, 2006 R. Grafl, A. Krall, C. Kruegel,
+   Copyright (C) 1996-2005, 2006, 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
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.
 
-   Contact: cacao@cacaojvm.org
-
-   Authors: Christian Thalinger
-
-   Changes:
-
-   $Id: finalizer.c 4559 2006-03-05 23:24:50Z twisti $
-
 */
 
 
 #include "vm/types.h"
 
 #include "mm/memory.h"
-#include "native/jni.h"
-#include "native/include/java_lang_Thread.h"
-#include "native/include/java_lang_VMThread.h"
+
+#include "threads/lock-common.h"
+#include "threads/threads-common.h"
+
 #include "vm/builtin.h"
 #include "vm/exceptions.h"
 #include "vm/global.h"
-#include "vm/options.h"
 #include "vm/stringlocal.h"
 #include "vm/vm.h"
+
 #include "vm/jit/asmpart.h"
 
+#include "vmcore/options.h"
+
 
 /* global variables ***********************************************************/
 
-#if defined(USE_THREADS)
-static java_lang_VMThread *finalizer_vmthread;
-static java_objectheader *lock_finalizer_thread;
+#if defined(ENABLE_THREADS)
+static java_object_t *lock_thread_finalizer;
 #endif
 
 
@@ -68,12 +62,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_object_t);
 
-# if defined(NATIVE_THREADS)
-       initObjectLock(lock_finalizer_thread);
-# endif
+       LOCK_INIT_OBJECT_LOCK(lock_thread_finalizer);
 #endif
 
        /* everything's ok */
@@ -90,21 +82,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,32 +112,16 @@ static void finalizer_thread(void)
 
 *******************************************************************************/
 
-#if defined(USE_THREADS)
+#if defined(ENABLE_THREADS)
 bool finalizer_start_thread(void)
 {
-       java_lang_Thread *t;
-
-       /* create the finalizer object */
+       utf *name;
 
-       finalizer_vmthread =
-               (java_lang_VMThread *) builtin_new(class_java_lang_VMThread);
+       name = utf_new_char("Finalizer");
 
-       if (!finalizer_vmthread)
+       if (!threads_thread_start_internal(name, finalizer_thread))
                return false;
 
-       t = (java_lang_Thread *) builtin_new(class_java_lang_Thread);
-
-       t->vmThread = finalizer_vmthread;
-       t->name     = javastring_new_char("Finalizer");
-       t->daemon   = true;
-       t->priority = 5;
-
-       finalizer_vmthread->thread = t;
-
-       /* actually start the finalizer thread */
-
-       threads_start_thread(t, finalizer_thread);
-
        /* everything's ok */
 
        return true;
@@ -162,18 +138,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 */
 
@@ -190,9 +166,9 @@ void finalizer_notify(void)
 
 void finalizer_run(void *o, void *p)
 {
-       java_objectheader *ob;
+       java_object_t *ob;
 
-       ob = (java_objectheader *) o;
+       ob = (java_object_t *) o;
 
        /* call the finalizer function */
 
@@ -200,7 +176,7 @@ void finalizer_run(void *o, void *p)
 
        /* if we had an exception in the finalizer, ignore it */
 
-       *exceptionptr = NULL;
+       exceptions_clear_exception();
 }