Author: toad
Date: 2008-11-27 01:33:05 +0000 (Thu, 27 Nov 2008)
New Revision: 23900

Modified:
   trunk/freenet/src/freenet/clients/http/FProxyToadlet.java
Log:
Fix bucket leak


Modified: trunk/freenet/src/freenet/clients/http/FProxyToadlet.java
===================================================================
--- trunk/freenet/src/freenet/clients/http/FProxyToadlet.java   2008-11-27 
01:32:44 UTC (rev 23899)
+++ trunk/freenet/src/freenet/clients/http/FProxyToadlet.java   2008-11-27 
01:33:05 UTC (rev 23900)
@@ -129,9 +129,11 @@
                                force = true;
                }
 
+               Bucket toFree = null;
                try {
                        if((!force) && (!forceDownload)) {
                                FilterOutput fo = ContentFilter.filter(data, 
bucketFactory, mimeType, key.toURI(basePath), 
context.getContainer().enableInlinePrefetch() ? prefetchHook : null);
+                               if(data != fo.data) toFree = fo.data;
                                data = fo.data;
                                mimeType = fo.type;
                                
@@ -258,6 +260,8 @@
                        byte[] pageBytes = 
pageNode.generate().getBytes("UTF-8");
                        context.sendReplyHeaders(200, "OK", new 
MultiValueTable<String, String>(), "text/html; charset=utf-8", 
pageBytes.length);
                        context.writeData(pageBytes);
+               } finally {
+                       if(toFree != null) toFree.free();
                }
        }
        
@@ -424,6 +428,7 @@
                        if(override.length() == 0) override = "?forcedownload";
                        else override = override+"&forcedownload";
                }
+               Bucket data = null;
                try {
                        if(Logger.shouldLog(Logger.MINOR, this))
                                Logger.minor(this, "FProxy fetching "+key+" 
("+maxSize+ ')');
@@ -431,7 +436,7 @@
                        
                        // Now, is it safe?
                        
-                       Bucket data = result.asBucket();
+                       data = result.asBucket();
                        String mimeType = result.getMimeType();
                        
                        String referer = sanitizeReferer(ctx);
@@ -549,6 +554,8 @@
                        throw e;
                } catch (Throwable t) {
                        writeInternalError(t, ctx);
+               } finally {
+                       if(data != null) data.free();
                }
        }
 

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

Reply via email to