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? :)


Reply via email to