home *** CD-ROM | disk | FTP | other *** search
- package java.lang.ref;
-
- import java.security.AccessController;
-
- final class Finalizer extends FinalReference {
- private static ReferenceQueue queue = new ReferenceQueue();
- private static Finalizer unfinalized = null;
- private static Object lock = new Object();
- private Finalizer next = null;
- private Finalizer prev = null;
-
- static native void invokeFinalizeMethod(Object var0) throws Throwable;
-
- private boolean hasBeenFinalized() {
- return this.next == this;
- }
-
- private void add() {
- Object var1 = lock;
- synchronized(var1) {
- if (unfinalized != null) {
- this.next = unfinalized;
- unfinalized.prev = this;
- }
-
- unfinalized = this;
- }
- }
-
- private void remove() {
- Object var1 = lock;
- synchronized(var1) {
- if (unfinalized == this) {
- if (this.next != null) {
- unfinalized = this.next;
- } else {
- unfinalized = this.prev;
- }
- }
-
- if (this.next != null) {
- this.next.prev = this.prev;
- }
-
- if (this.prev != null) {
- this.prev.next = this.next;
- }
-
- this.next = this;
- this.prev = this;
- }
- }
-
- private Finalizer(Object var1) {
- super(var1, queue);
- this.add();
- }
-
- static void register(Object var0) {
- new Finalizer(var0);
- }
-
- private void runFinalizer() {
- synchronized(this) {
- if (this.hasBeenFinalized()) {
- return;
- }
-
- this.remove();
- }
-
- try {
- Object var2 = ((Reference)this).get();
- if (var2 != null) {
- invokeFinalizeMethod(var2);
- var2 = null;
- }
- } catch (Throwable var3) {
- }
-
- super.clear();
- }
-
- private static void forkSecondaryFinalizer(Runnable var0) {
- 1 var1 = new 1(var0);
- AccessController.doPrivileged(var1);
- }
-
- static void runFinalization() {
- forkSecondaryFinalizer(new 2());
- }
-
- static void runAllFinalizers() {
- forkSecondaryFinalizer(new 3());
- }
-
- // $FF: synthetic method
- static ReferenceQueue access$000() {
- return queue;
- }
-
- // $FF: synthetic method
- static void access$100(Finalizer var0) {
- var0.runFinalizer();
- }
-
- // $FF: synthetic method
- static Object access$200() {
- return lock;
- }
-
- // $FF: synthetic method
- static Finalizer access$300() {
- return unfinalized;
- }
-
- // $FF: synthetic method
- static Finalizer access$302(Finalizer var0) {
- unfinalized = var0;
- return var0;
- }
-
- // $FF: synthetic method
- static Finalizer access$400(Finalizer var0) {
- return var0.next;
- }
-
- static {
- ThreadGroup var0 = Thread.currentThread().getThreadGroup();
-
- for(ThreadGroup var1 = var0; var1 != null; var1 = var1.getParent()) {
- var0 = var1;
- }
-
- FinalizerThread var2 = new FinalizerThread(var0);
- ((Thread)var2).setPriority(8);
- ((Thread)var2).setDaemon(true);
- ((Thread)var2).start();
- }
- }
-