Author: toad
Date: 2007-03-17 15:23:53 +0000 (Sat, 17 Mar 2007)
New Revision: 12189
Modified:
trunk/freenet/src/freenet/support/RandomGrabArray.java
Log:
Prevent race condition resulting in RGA not being removed
Modified: trunk/freenet/src/freenet/support/RandomGrabArray.java
===================================================================
--- trunk/freenet/src/freenet/support/RandomGrabArray.java 2007-03-17
15:21:58 UTC (rev 12188)
+++ trunk/freenet/src/freenet/support/RandomGrabArray.java 2007-03-17
15:23:53 UTC (rev 12189)
@@ -30,13 +30,14 @@
}
public void add(RandomGrabArrayItem req) {
+ if(req.isCancelled()) {
+ if(Logger.shouldLog(Logger.MINOR, this))
+ Logger.minor(this, "Is finished already: "+req);
+ return;
+ }
+ req.setParentGrabArray(this);
synchronized(this) {
if(contents.contains(req)) return;
- if(req.isCancelled()) {
- if(Logger.shouldLog(Logger.MINOR, this))
- Logger.minor(this, "Is finished
already: "+req);
- return;
- }
contents.add(req);
if(index >= reqs.length) {
RandomGrabArrayItem[] r = new
RandomGrabArrayItem[reqs.length*2];
@@ -45,7 +46,6 @@
}
reqs[index++] = req;
}
- req.setParentGrabArray(this);
}
public RandomGrabArrayItem removeRandom() {