diff options
Diffstat (limited to 'libjava/gnu/gcj/runtime/FinalizerThread.java')
| -rw-r--r-- | libjava/gnu/gcj/runtime/FinalizerThread.java | 55 |
1 files changed, 7 insertions, 48 deletions
diff --git a/libjava/gnu/gcj/runtime/FinalizerThread.java b/libjava/gnu/gcj/runtime/FinalizerThread.java index e333d7a41c7..c9a917cd264 100644 --- a/libjava/gnu/gcj/runtime/FinalizerThread.java +++ b/libjava/gnu/gcj/runtime/FinalizerThread.java @@ -1,6 +1,6 @@ // FinalizerThread.java -- Thread in which finalizers are run. -/* Copyright (C) 2001 Free Software Foundation +/* Copyright (C) 2001, 2004 Free Software Foundation This file is part of libgcj. @@ -16,58 +16,17 @@ package gnu.gcj.runtime; */ public final class FinalizerThread extends Thread { - // Finalizers must be run in a thread with no Java-visible locks - // held. This qualifies because we don't make the lock visible. - private static final Object lock = new Object (); - - // This is true if the finalizer thread started successfully. It - // might be false if, for instance, there are no threads on the - // current platform. In this situation we run finalizers in the - // caller's thread. - private static boolean thread_started = false; + private static boolean finalizer_ready; public FinalizerThread () { super ("LibgcjInternalFinalizerThread"); setDaemon (true); + finalizer_ready = false; + init(); } - // This is called by the runtime when a finalizer is ready to be - // run. It simply wakes up the finalizer thread. - public static void finalizerReady () - { - synchronized (lock) - { - if (! thread_started) - runFinalizers (); - else - lock.notify (); - } - } - - // Actually run the finalizers. - private static native void runFinalizers (); - - public void run () - { - // Wait on a lock. Whenever we wake up, try to invoke the - // finalizers. - synchronized (lock) - { - thread_started = true; - while (true) - { - try - { - lock.wait (); - } - catch (InterruptedException _) - { - // Just ignore it. It doesn't hurt to run finalizers - // when none are pending. - } - runFinalizers (); - } - } - } + private native void init(); + static native void finalizerReady(); + public native void run(); } |

