[freenet-cvs] r11734 - in trunk/freenet/src/freenet: node/fcp support/io

toad at freenetproject.org toad at freenetproject.org
Sat Feb 10 01:05:56 UTC 2007


Author: toad
Date: 2007-02-10 01:05:54 +0000 (Sat, 10 Feb 2007)
New Revision: 11734

Modified:
   trunk/freenet/src/freenet/node/fcp/PersistentPutDir.java
   trunk/freenet/src/freenet/support/io/DelayedFreeBucket.java
Log:
Fix persistent put dirs bug (#1094).

Modified: trunk/freenet/src/freenet/node/fcp/PersistentPutDir.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/PersistentPutDir.java	2007-02-10 00:58:34 UTC (rev 11733)
+++ trunk/freenet/src/freenet/node/fcp/PersistentPutDir.java	2007-02-10 01:05:54 UTC (rev 11734)
@@ -9,8 +9,10 @@
 import freenet.client.async.SimpleManifestPutter;
 import freenet.keys.FreenetURI;
 import freenet.node.Node;
+import freenet.support.Logger;
 import freenet.support.SimpleFieldSet;
 import freenet.support.api.Bucket;
+import freenet.support.io.DelayedFreeBucket;
 import freenet.support.io.FileBucket;
 import freenet.support.io.PaddedEphemerallyEncryptedBucket;
 
@@ -71,12 +73,17 @@
 				subset.putSingle("TargetURI", tempURI.toString());
 			} else {
 				Bucket data = e.getData();
+				if(data instanceof DelayedFreeBucket) {
+					data = ((DelayedFreeBucket)data).getUnderlying();
+				}
 				subset.put("DataLength", e.getSize());
 				if(mimeOverride != null)
 					subset.putSingle("Metadata.ContentType", mimeOverride);
 				// What to do with the bucket?
 				// It is either a persistent encrypted bucket or a file bucket ...
-				if(data instanceof FileBucket) {
+				if(data == null) {
+					Logger.error(this, "Bucket already freed: "+e.getData()+" for "+e+" for "+identifier);
+				} else if(data instanceof FileBucket) {
 					subset.putSingle("UploadFrom", "disk");
 					subset.putSingle("Filename", ((FileBucket)data).getFile().getPath());
 				} else if((data instanceof PaddedEphemerallyEncryptedBucket) || (data == null)) {

Modified: trunk/freenet/src/freenet/support/io/DelayedFreeBucket.java
===================================================================
--- trunk/freenet/src/freenet/support/io/DelayedFreeBucket.java	2007-02-10 00:58:34 UTC (rev 11733)
+++ trunk/freenet/src/freenet/support/io/DelayedFreeBucket.java	2007-02-10 01:05:54 UTC (rev 11734)
@@ -57,6 +57,11 @@
 		bucket.setReadOnly();
 	}
 
+	public Bucket getUnderlying() {
+		if(freed) return null;
+		return bucket;
+	}
+	
 	public void free() {
 		synchronized(this) { // mutex on just this method; make a separate lock if necessary to lock the above
 			if(freed) return;




More information about the cvs mailing list