--- old/src/share/classes/java/lang/ref/ReferenceQueue.java 2013-07-01 10:46:26.234830822 +0200 +++ new/src/share/classes/java/lang/ref/ReferenceQueue.java 2013-07-01 10:46:25.886830829 +0200 @@ -58,6 +58,11 @@ synchronized (r) { if (r.queue == ENQUEUED) return false; synchronized (lock) { + // Check that since getting the lock this reference hasn't already been + // enqueued (and even then removed) + if (r.queue != this) { + return false; + } r.queue = ENQUEUED; r.next = (head == null) ? r : head; head = r;