diff options
Diffstat (limited to 'java/openjdk6/files/icedtea/security/20130416/8003335.patch')
-rw-r--r-- | java/openjdk6/files/icedtea/security/20130416/8003335.patch | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/java/openjdk6/files/icedtea/security/20130416/8003335.patch b/java/openjdk6/files/icedtea/security/20130416/8003335.patch new file mode 100644 index 000000000000..ae733a018f2a --- /dev/null +++ b/java/openjdk6/files/icedtea/security/20130416/8003335.patch @@ -0,0 +1,63 @@ +# HG changeset patch +# User chegar +# Date 1356010827 0 +# Node ID 3c7eb39c811464c98847a4f1a167636c1db80f17 +# Parent a0e51ed355c9ae1256f8d344df34babb87a1edce +8003335: Better handling of Finalizer thread +Reviewed-by: alanb, ahgross + +diff --git a/src/share/classes/java/lang/ref/Finalizer.java b/src/share/classes/java/lang/ref/Finalizer.java +--- jdk/src/share/classes/java/lang/ref/Finalizer.java ++++ jdk/src/share/classes/java/lang/ref/Finalizer.java +@@ -38,9 +38,9 @@ + */ + static native void invokeFinalizeMethod(Object o) throws Throwable; + +- static private ReferenceQueue queue = new ReferenceQueue(); +- static private Finalizer unfinalized = null; +- static private Object lock = new Object(); ++ private static ReferenceQueue queue = new ReferenceQueue(); ++ private static Finalizer unfinalized = null; ++ private static final Object lock = new Object(); + + private Finalizer + next = null, +@@ -142,7 +142,11 @@ + /* Called by Runtime.runFinalization() */ + static void runFinalization() { + forkSecondaryFinalizer(new Runnable() { ++ private volatile boolean running; + public void run() { ++ if (running) ++ return; ++ running = true; + for (;;) { + Finalizer f = (Finalizer)queue.poll(); + if (f == null) break; +@@ -155,7 +159,11 @@ + /* Invoked by java.lang.Shutdown */ + static void runAllFinalizers() { + forkSecondaryFinalizer(new Runnable() { ++ private volatile boolean running; + public void run() { ++ if (running) ++ return; ++ running = true; + for (;;) { + Finalizer f; + synchronized (lock) { +@@ -168,10 +176,14 @@ + } + + private static class FinalizerThread extends Thread { ++ private volatile boolean running; + FinalizerThread(ThreadGroup g) { + super(g, "Finalizer"); + } + public void run() { ++ if (running) ++ return; ++ running = true; + for (;;) { + try { + Finalizer f = (Finalizer)queue.remove(); |