From: kkolinko Date: Mon, 22 Nov 2010 17:40:09 +0000 (+0000) Subject: Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=50228 X-Git-Url: https://git.internetallee.de/?a=commitdiff_plain;h=3e2f4feb04051b39e9f4568edd221050c40f6a39;p=tomcat7.0 Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=50228 Improve recycling of BodyContentImpl. git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@1037794 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/java/org/apache/jasper/runtime/BodyContentImpl.java b/java/org/apache/jasper/runtime/BodyContentImpl.java index 153ee0dde..d9fb0f8a1 100644 --- a/java/org/apache/jasper/runtime/BodyContentImpl.java +++ b/java/org/apache/jasper/runtime/BodyContentImpl.java @@ -605,7 +605,27 @@ public class BodyContentImpl extends BodyContent { clearBody(); } } - + + /** + * This method shall "reset" the internal state of a BodyContentImpl, + * releasing all internal references, and preparing it for potential + * reuse by a later invocation of {@link PageContextImpl#pushBody(Writer)}. + * + *

Note, that BodyContentImpl instances are usually owned by a + * PageContextImpl instance, and PageContextImpl instances are recycled + * and reused. + * + * @see PageContextImpl#release() + */ + protected void recycle() { + this.writer = null; + try { + this.clear(); + } catch (IOException ex) { + // ignore + } + } + private void ensureOpen() throws IOException { if (closed) throw new IOException("Stream closed"); } diff --git a/java/org/apache/jasper/runtime/PageContextImpl.java b/java/org/apache/jasper/runtime/PageContextImpl.java index c030910a2..f7a0a63f1 100644 --- a/java/org/apache/jasper/runtime/PageContextImpl.java +++ b/java/org/apache/jasper/runtime/PageContextImpl.java @@ -204,6 +204,9 @@ public class PageContextImpl extends PageContext { baseOut.recycle(); session = null; attributes.clear(); + for (BodyContentImpl body: outs) { + body.recycle(); + } } }