Author: nextgens
Date: 2008-08-31 08:11:21 +0000 (Sun, 31 Aug 2008)
New Revision: 22266
Modified:
trunk/freenet/src/freenet/support/io/ArrayBucket.java
Log:
ArrayBucket: prevent double-closure of outputStreams in order to fix the
following exception:
ao-b?\195?\187t 31, 2008 08:02:28:382
(freenet.support.io.TempBucketFactory$TempBucket, RAMBucket migrator
(1220169748360)(26), ERROR): An IOE occured while migrating long-lived
buckets:Read only
java.io.IOException: Read only
at
freenet.support.io.ArrayBucket$ArrayBucketOutputStream.close(ArrayBucket.java:89)
at
freenet.support.io.TempBucketFactory$TempBucket.migrateToFileBucket(TempBucketFactory.java:111)
Modified: trunk/freenet/src/freenet/support/io/ArrayBucket.java
===================================================================
--- trunk/freenet/src/freenet/support/io/ArrayBucket.java 2008-08-31
07:48:30 UTC (rev 22265)
+++ trunk/freenet/src/freenet/support/io/ArrayBucket.java 2008-08-31
08:11:21 UTC (rev 22266)
@@ -79,12 +79,15 @@
}
private class ArrayBucketOutputStream extends ByteArrayOutputStream {
+ private boolean hasBeenClosed = false;
public ArrayBucketOutputStream() {
super();
}
public void close() throws IOException {
+ if(hasBeenClosed) return;
+ hasBeenClosed = true;
data.add(super.toByteArray());
if(readOnly) throw new IOException("Read only");
// FIXME maybe we should throw on write instead? :)