Author: toad
Date: 2008-11-27 01:40:06 +0000 (Thu, 27 Nov 2008)
New Revision: 23901

Modified:
   trunk/freenet/src/freenet/client/FECCodec.java
Log:
Fix a bucket leak


Modified: trunk/freenet/src/freenet/client/FECCodec.java
===================================================================
--- trunk/freenet/src/freenet/client/FECCodec.java      2008-11-27 01:33:05 UTC 
(rev 23900)
+++ trunk/freenet/src/freenet/client/FECCodec.java      2008-11-27 01:40:06 UTC 
(rev 23901)
@@ -252,6 +252,8 @@
                DataInputStream[] readers = new DataInputStream[k];
                OutputStream[] writers = new OutputStream[n - k];
 
+               Bucket toFree = null;
+               
                try {
 
                        int[] toEncode = new int[n - k];
@@ -272,9 +274,10 @@
                                if(sz < blockLength) {
                                        if(i != dataBlockStatus.length - 1)
                                                throw new 
IllegalArgumentException("All buckets except the last must be the full size");
-                                       if(sz < blockLength)
+                                       if(sz < blockLength) {
                                                buckets[i] = 
BucketTools.pad(buckets[i], blockLength, bf, (int) sz);
-                                       else
+                                               toFree = buckets[i];
+                                       } else
                                                throw new 
IllegalArgumentException("Too big: " + sz + " bigger than " + blockLength);
                                }
                                readers[i] = new 
DataInputStream(buckets[i].getInputStream());
@@ -345,6 +348,8 @@
                                Closer.close(readers[i]);
                        for(int i = 0; i < n - k; i++)
                                Closer.close(writers[i]);
+                       if(toFree != null)
+                               toFree.free();
                }
                // Set new buckets only after have a successful decode.
                for(int i = 0; i < checkBlockStatus.length; i++) {

_______________________________________________
cvs mailing list
[email protected]
http://emu.freenetproject.org/cgi-bin/mailman/listinfo/cvs

Reply via email to