Author: toad
Date: 2006-07-26 20:06:51 +0000 (Wed, 26 Jul 2006)
New Revision: 9781

Modified:
   trunk/freenet/src/freenet/client/async/SplitFileInserterSegment.java
   trunk/freenet/src/freenet/node/Version.java
Log:
908: Fix nasty NPE in splitfile inserts.

Modified: trunk/freenet/src/freenet/client/async/SplitFileInserterSegment.java
===================================================================
--- trunk/freenet/src/freenet/client/async/SplitFileInserterSegment.java        
2006-07-26 19:24:44 UTC (rev 9780)
+++ trunk/freenet/src/freenet/client/async/SplitFileInserterSegment.java        
2006-07-26 20:06:51 UTC (rev 9781)
@@ -345,6 +345,18 @@
                        // Because of the counting.
                        encoded = true;
                        parent.encodedSegment(this);
+                       synchronized(this) {
+                               for(int i=0;i<dataBlockInserters.length;i++) {
+                                       if(dataBlockInserters[i] == null && 
dataBlocks[i] != null) {
+                                               try {
+                                                       
parent.ctx.persistentBucketFactory.freeBucket(dataBlocks[i]);
+                                               } catch (IOException e) {
+                                                       Logger.error(this, 
"Could not free "+dataBlocks[i]+" : "+e, e);
+                                               }
+                                               dataBlocks[i] = null;
+                                       }
+                               }
+                       }
                } catch (IOException e) {
                        InserterException ex = 
                                new 
InserterException(InserterException.BUCKET_ERROR, e, null);
@@ -451,12 +463,14 @@
                                return true;
                        }
                        dataBlockInserters[x] = null;
-                       try {
-                               
parent.ctx.persistentBucketFactory.freeBucket(dataBlocks[x]);
-                       } catch (IOException e) {
-                               Logger.error(this, "Could not free 
"+dataBlocks[x]+" : "+e, e);
+                       if(encoded) {
+                               try {
+                                       
parent.ctx.persistentBucketFactory.freeBucket(dataBlocks[x]);
+                               } catch (IOException e) {
+                                       Logger.error(this, "Could not free 
"+dataBlocks[x]+" : "+e, e);
+                               }
+                               dataBlocks[x] = null;
                        }
-                       dataBlocks[x] = null;
                }
                blocksCompleted++;
                if(blocksCompleted != dataBlockInserters.length + 
checkBlockInserters.length) return true;

Modified: trunk/freenet/src/freenet/node/Version.java
===================================================================
--- trunk/freenet/src/freenet/node/Version.java 2006-07-26 19:24:44 UTC (rev 
9780)
+++ trunk/freenet/src/freenet/node/Version.java 2006-07-26 20:06:51 UTC (rev 
9781)
@@ -18,7 +18,7 @@
        public static final String protocolVersion = "1.0";

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

        /** Oldest build of Fred we will talk to */
        private static final int oldLastGoodBuild = 870;


Reply via email to