[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