Author: toad
Date: 2006-08-03 15:08:14 +0000 (Thu, 03 Aug 2006)
New Revision: 9859

Modified:
   trunk/freenet/src/freenet/client/async/ClientPutter.java
   trunk/freenet/src/freenet/client/async/SingleFileInserter.java
   trunk/freenet/src/freenet/client/async/SplitFileInserter.java
   trunk/freenet/src/freenet/node/PacketSender.java
   trunk/freenet/src/freenet/node/Version.java
Log:
920: Fix a major, but non-progressive, memory leak. MANDATORY AT MIDNIGHT ON 
TUESDAY GMT.

Modified: trunk/freenet/src/freenet/client/async/ClientPutter.java
===================================================================
--- trunk/freenet/src/freenet/client/async/ClientPutter.java    2006-08-03 
15:04:00 UTC (rev 9858)
+++ trunk/freenet/src/freenet/client/async/ClientPutter.java    2006-08-03 
15:08:14 UTC (rev 9859)
@@ -27,7 +27,7 @@
        private FreenetURI uri;
        /** SimpleFieldSet containing progress information from last startup.
         * Will be progressively cleared during startup. */
-       private final SimpleFieldSet oldProgress;
+       private SimpleFieldSet oldProgress;

        /**
         * @param client The object to call back when we complete, or don't.
@@ -75,6 +75,7 @@
                        }
                        if(cancel) {
                                onFailure(new 
InserterException(InserterException.CANCELLED), null);
+                               oldProgress = null;
                                return;
                        }
                        synchronized(this) {
@@ -82,10 +83,12 @@
                        }
                        if(cancel) {
                                onFailure(new 
InserterException(InserterException.CANCELLED), null);
+                               oldProgress = null;
                                return;
                        }
                        ((SingleFileInserter)currentState).start(oldProgress);
                        synchronized(this) {
+                               oldProgress = null;
                                cancel = cancelled;
                        }
                        if(cancel) {
@@ -96,6 +99,7 @@
                        Logger.error(this, "Failed to start insert: "+e, e);
                        synchronized(this) {
                                finished = true;
+                               oldProgress = null;
                                currentState = null;
                        }
                        // notify the client that the insert could not even be 
started
@@ -110,6 +114,7 @@
                synchronized(this) {
                        finished = true;
                        currentState = null;
+                       oldProgress = null;
                }
                client.onSuccess(this);
        }
@@ -118,6 +123,7 @@
                synchronized(this) {
                        finished = true;
                        currentState = null;
+                       oldProgress = null;
                }
                client.onFailure(e, this);
        }

Modified: trunk/freenet/src/freenet/client/async/SingleFileInserter.java
===================================================================
--- trunk/freenet/src/freenet/client/async/SingleFileInserter.java      
2006-08-03 15:04:00 UTC (rev 9858)
+++ trunk/freenet/src/freenet/client/async/SingleFileInserter.java      
2006-08-03 15:08:14 UTC (rev 9859)
@@ -294,6 +294,7 @@
                                throw new ResumeException("No 
SplitFileInserter");
                        ClientPutState newSFI, newMetaPutter = null;
                        newSFI = new SplitFileInserter(parent, this, 
block.clientMetadata, ctx, getCHKOnly, metadata, token, 
insertAsArchiveManifest, sfiFS);
+                       fs.remove("SplitFileInserter");
                        SimpleFieldSet metaFS = fs.subset("MetadataPutter");
                        if(metaFS != null) {
                                try {
@@ -309,6 +310,7 @@
                                        // Ignore, it will be reconstructed 
later
                                }
                        }
+                       fs.remove("MetadataPutter");
                        synchronized(this) {
                                sfi = newSFI;
                                metadataPutter = newMetaPutter;

Modified: trunk/freenet/src/freenet/client/async/SplitFileInserter.java
===================================================================
--- trunk/freenet/src/freenet/client/async/SplitFileInserter.java       
2006-08-03 15:04:00 UTC (rev 9858)
+++ trunk/freenet/src/freenet/client/async/SplitFileInserter.java       
2006-08-03 15:08:14 UTC (rev 9859)
@@ -159,7 +159,9 @@
                int checkBlocks = 0;

                for(int i=0;i<segments.length;i++) {
-                       SimpleFieldSet segment = 
segFS.subset(Integer.toString(i));
+                       String index = Integer.toString(i);
+                       SimpleFieldSet segment = segFS.subset(index);
+                       segFS.remove(index);
                        if(segment == null) throw new ResumeException("No 
segment "+i);
                        segments[i] = new SplitFileInserterSegment(this, 
segment, splitfileAlgorithm, ctx, getCHKOnly, i);
                        dataBlocks += segments[i].countDataBlocks();

Modified: trunk/freenet/src/freenet/node/PacketSender.java
===================================================================
--- trunk/freenet/src/freenet/node/PacketSender.java    2006-08-03 15:04:00 UTC 
(rev 9858)
+++ trunk/freenet/src/freenet/node/PacketSender.java    2006-08-03 15:08:14 UTC 
(rev 9859)
@@ -310,7 +310,7 @@
                }
         }

-        if(jobsToRun != null)
+        if(jobsToRun != null) {
                for(int i=0;i<jobsToRun.size();i++) {
                        Runnable r = (Runnable) jobsToRun.get(i);
                        Logger.minor(this, "Running "+r);
@@ -327,6 +327,7 @@
                                t.start();
                        }
                }
+        }

         long sleepTime = nextActionTime - now;
         // 100ms maximum sleep time - same as the maximum coalescing delay

Modified: trunk/freenet/src/freenet/node/Version.java
===================================================================
--- trunk/freenet/src/freenet/node/Version.java 2006-08-03 15:04:00 UTC (rev 
9858)
+++ trunk/freenet/src/freenet/node/Version.java 2006-08-03 15:08:14 UTC (rev 
9859)
@@ -18,12 +18,12 @@
        public static final String protocolVersion = "1.0";

        /** The build number of the current revision */
-       private static final int buildNumber = 919;
+       private static final int buildNumber = 920;

        /** Oldest build of Fred we will talk to */
-       private static final int oldLastGoodBuild = 870;
-       private static final int newLastGoodBuild = 874;
-       private static final long transitionTime = 1153094400000L; // 0:00 GMT 
17/07/06
+       private static final int oldLastGoodBuild = 874;
+       private static final int newLastGoodBuild = 920;
+       private static final long transitionTime = 1154995200L*1000L; // 
midnight tuesday 8/08/06.

        public static final int buildNumber() {
                return buildNumber;


Reply via email to