From 3e2f4feb04051b39e9f4568edd221050c40f6a39 Mon Sep 17 00:00:00 2001 From: kkolinko Date: Mon, 22 Nov 2010 17:40:09 +0000 Subject: [PATCH] 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 --- .../org/apache/jasper/runtime/BodyContentImpl.java | 22 +++++++++++++++++++++- .../org/apache/jasper/runtime/PageContextImpl.java | 3 +++ 2 files changed, 24 insertions(+), 1 deletion(-) 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(); + } } } -- 2.11.0