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() {


Reply via email to