Index: batik-util/src/test/java/org/apache/batik/util/CleanerThreadTest.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- batik-util/src/test/java/org/apache/batik/util/CleanerThreadTest.java	(revision )
+++ batik-util/src/test/java/org/apache/batik/util/CleanerThreadTest.java	(revision )
@@ -0,0 +1,44 @@
+package org.apache.batik.util;
+
+import org.junit.Test;
+
+import java.lang.ref.WeakReference;
+
+/**
+ *
+ */
+public class CleanerThreadTest {
+    @Test
+    public void t() throws InterruptedException {
+        CleanerThread cleanerThread = new CleanerThread();
+
+        for (int i = 0; i < 10; i++) {
+            Thread t = createThread();
+            t.start();
+        }
+
+        Thread.sleep(1000);
+    }
+
+    private Thread createThread() {
+        Runnable r = new Runnable() {
+            @Override
+            public void run() {
+                WeakReference weakReference = new MyWeakReference(new Object());
+            }
+        };
+
+        return new Thread(r);
+    }
+
+    private static class MyWeakReference extends CleanerThread.WeakReferenceCleared {
+        MyWeakReference(Object o) {
+            super(o);
+        }
+
+        @Override
+        public void cleared() {
+            // deliberately empty
+        }
+    }
+}
Index: batik-util/src/main/java/org/apache/batik/util/CleanerThread.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- batik-util/src/main/java/org/apache/batik/util/CleanerThread.java	(revision 1804412)
+++ batik-util/src/main/java/org/apache/batik/util/CleanerThread.java	(revision )
@@ -38,9 +38,8 @@
     static CleanerThread  thread = null;
 
     public static ReferenceQueue getReferenceQueue() {
-
-        if ( queue == null ) {
-            synchronized (CleanerThread.class) {
+        synchronized (CleanerThread.class) {
+            if ( queue == null ) {
                 queue = new ReferenceQueue();
                 thread = new CleanerThread();
             }
@@ -103,7 +102,7 @@
             try {
                 Reference ref;
                 try {
-                    ref = queue.remove();
+                    ref = getReferenceQueue().remove();
                     // System.err.println("Cleaned: " + ref);
                 } catch (InterruptedException ie) {
                     continue;
