Author: toad
Date: 2008-06-20 11:27:47 +0000 (Fri, 20 Jun 2008)
New Revision: 20515

Modified:
   branches/db4o/freenet/src/freenet/client/async/ManifestElement.java
   branches/db4o/freenet/src/freenet/node/fcp/ClientPut.java
   branches/db4o/freenet/src/freenet/node/fcp/ClientPutDir.java
   branches/db4o/freenet/src/freenet/support/io/DelayedFreeBucket.java
Log:
Fix NPE: don't call removeFrom(container) unless PERSIST_FOREVER.
Also some paranoia.

Modified: branches/db4o/freenet/src/freenet/client/async/ManifestElement.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/ManifestElement.java 
2008-06-20 00:56:30 UTC (rev 20514)
+++ branches/db4o/freenet/src/freenet/client/async/ManifestElement.java 
2008-06-20 11:27:47 UTC (rev 20515)
@@ -78,10 +78,11 @@
                return false;
        }

-       public void freeData(ObjectContainer container) {
+       public void freeData(ObjectContainer container, boolean persistForever) 
{
                if(data != null) {
                        data.free();
-                       data.removeFrom(container);
+                       if(persistForever)
+                               data.removeFrom(container);
                        data = null;
                }
        }

Modified: branches/db4o/freenet/src/freenet/node/fcp/ClientPut.java
===================================================================
--- branches/db4o/freenet/src/freenet/node/fcp/ClientPut.java   2008-06-20 
00:56:30 UTC (rev 20514)
+++ branches/db4o/freenet/src/freenet/node/fcp/ClientPut.java   2008-06-20 
11:27:47 UTC (rev 20515)
@@ -392,7 +392,8 @@
                }
                if(d == null) return;
                d.free();
-               d.removeFrom(container);
+               if(persistenceType == PERSIST_FOREVER)
+                       d.removeFrom(container);
        }

        public SimpleFieldSet getFieldSet() {

Modified: branches/db4o/freenet/src/freenet/node/fcp/ClientPutDir.java
===================================================================
--- branches/db4o/freenet/src/freenet/node/fcp/ClientPutDir.java        
2008-06-20 00:56:30 UTC (rev 20514)
+++ branches/db4o/freenet/src/freenet/node/fcp/ClientPutDir.java        
2008-06-20 11:27:47 UTC (rev 20515)
@@ -256,7 +256,7 @@
                                freeData((HashMap)o, container);
                        else {
                                ManifestElement e = (ManifestElement) o;
-                               e.freeData(container);
+                               e.freeData(container, persistenceType == 
PERSIST_FOREVER);
                        }
                }
        }

Modified: branches/db4o/freenet/src/freenet/support/io/DelayedFreeBucket.java
===================================================================
--- branches/db4o/freenet/src/freenet/support/io/DelayedFreeBucket.java 
2008-06-20 00:56:30 UTC (rev 20514)
+++ branches/db4o/freenet/src/freenet/support/io/DelayedFreeBucket.java 
2008-06-20 11:27:47 UTC (rev 20515)
@@ -25,6 +25,7 @@
        public DelayedFreeBucket(PersistentTempBucketFactory factory, 
PaddedEphemerallyEncryptedBucket bucket) {
                this.factory = factory;
                this.bucket = bucket;
+               if(bucket == null) throw new NullPointerException();
        }

        public DelayedFreeBucket(SimpleFieldSet fs, RandomSource random, 
PersistentFileTracker f) throws CannotCreateFromFieldSetException {


Reply via email to