SUGGESTED FIX
--- /u/martin/ws/mustang/src/share/classes/java/util/concurrent/LinkedBlockingQueue.java 2004-08-27 15:54:58.702764000 -0700
+++ /u/martin/ws/jsr166/src/share/classes/java/util/concurrent/LinkedBlockingQueue.java 2004-10-31 14:54:45.663173000 -0800
@@ -526,6 +526,8 @@
fullyLock();
try {
head.next = null;
+ head.item = null;
+ last = head;
if (count.getAndSet(0) == capacity)
notFull.signalAll();
} finally {
@@ -543,6 +545,7 @@
try {
first = head.next;
head.next = null;
+ last = head;
if (count.getAndSet(0) == capacity)
notFull.signalAll();
} finally {
@@ -555,6 +558,7 @@
p.item = null;
++n;
}
+ head.item = null; // Just for GC, so OK if not within lock
return n;
}
@@ -577,6 +581,9 @@
}
if (n != 0) {
head.next = p;
+ head.item = null;
+ if (p == null)
+ last = head;
if (count.getAndAdd(-n) == capacity)
notFull.signalAll();
}
###@###.### 11/1/04 22:30 GMT
|