Subject: [PATCH] Link to the Sun JVM bug mentioned in OffsetCache

From: "Shawn O. Pearce" <[email-masked]>
Date: Wed, 6 May 2009 07:15:26 -0700

This bug has now been published by Sun.  We should link to the
database entry so we can find more detail later.

Signed-off-by: Shawn O. Pearce <[email-masked]>
---
  "Shawn O. Pearce" <[email-masked]> wrote:
  > Robin Rosenberg <[email-masked]> wrote:
  > > > diff --git a/org.spearce.jgit/src/org/spearce/jgit/lib/OffsetCache.java b/org.spearce.jgit/src/org/spearce/jgit/lib/OffsetCache.java
  > > > +	private void gc() {
  > > > +		R r;
  > > > +		while ((r = (R) queue.poll()) != null) {
  > > > +			// Sun's Java 5 and 6 implementation have a bug where a Reference
  > > > +			// can be enqueued and dequeued twice on the same reference queue
  > > > +			// due to a race condition within ReferenceQueue.enqueue(Reference).
  > > 
  > > Reference to the official Sun bug? Might help if someone wants to
  > > implement a flag to avoid this (if necessary...)
  > 
  > Actually, this is a new bug.  I tried looking through BugParade
  > but nobody has mentioned or discovered this before.
  > 
  > I submitted a bug report yesterday, but they have yet to publish it.

  And here it is.

 .../src/org/spearce/jgit/lib/OffsetCache.java      |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)

diff --git a/org.spearce.jgit/src/org/spearce/jgit/lib/OffsetCache.java b/org.spearce.jgit/src/org/spearce/jgit/lib/OffsetCache.java
index a1cd4be..b81c7e0 100644
--- a/org.spearce.jgit/src/org/spearce/jgit/lib/OffsetCache.java
+++ b/org.spearce.jgit/src/org/spearce/jgit/lib/OffsetCache.java
@@ -414,6 +414,8 @@ private void gc() {
 			// can be enqueued and dequeued twice on the same reference queue
 			// due to a race condition within ReferenceQueue.enqueue(Reference).
 			//
+			// http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6837858
+			//
 			// We CANNOT permit a Reference to come through us twice, as it will
 			// skew the resource counters we maintain. Our canClear() check here
 			// provides a way to skip the redundant dequeues, if any.
-- 
1.6.3.rc4.206.g03e16