diff --git a/java/org/apache/jasper/compiler/Generator.java b/java/org/apache/jasper/compiler/Generator.java index f9425d9173d2..4798ffe4b7cf 100644 --- a/java/org/apache/jasper/compiler/Generator.java +++ b/java/org/apache/jasper/compiler/Generator.java @@ -2352,7 +2352,7 @@ private void generateCustomEnd(Node.CustomTag n, String tagHandlerVar, out.print(".reuse("); out.print(tagHandlerVar); out.println(");"); - + } else { // Clean-up out.printin("org.apache.jasper.runtime.JspRuntimeLibrary.releaseTag("); out.print(tagHandlerVar); diff --git a/test/org/apache/jasper/compiler/TestGenerator.java b/test/org/apache/jasper/compiler/TestGenerator.java index 477ef0df513e..892e398660b3 100644 --- a/test/org/apache/jasper/compiler/TestGenerator.java +++ b/test/org/apache/jasper/compiler/TestGenerator.java @@ -545,6 +545,25 @@ public void setData(String data) { } } + private static boolean tagTesterTagReleaseReleased = false; + + public static class TesterTagRelease extends TesterTag { + private String data; + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + @Override + public void release() { + tagTesterTagReleaseReleased = true; + } + } + public static class DataPropertyEditor extends PropertyEditorSupport { } @@ -952,6 +971,38 @@ public void testBug65390() throws Exception { Assert.assertEquals(body.toString(), HttpServletResponse.SC_OK, rc); } + @Test + public void testTagReleaseWithPooling() throws Exception { + doTestTagRelease(true); + } + + @Test + public void testTagReleaseWithoutPooling() throws Exception { + doTestTagRelease(false); + } + + public void doTestTagRelease(boolean enablePooling) throws Exception { + tagTesterTagReleaseReleased = false; + Tomcat tomcat = getTomcatInstance(); + + File appDir = new File("test/webapp"); + Context ctxt = tomcat.addContext("", appDir.getAbsolutePath()); + ctxt.addServletContainerInitializer(new JasperInitializer(), null); + + Tomcat.initWebappDefaults(ctxt); + Wrapper w = (Wrapper) ctxt.findChild("jsp"); + w.addInitParameter("enablePooling", String.valueOf(enablePooling)); + + tomcat.start(); + + getUrl("http://localhost:" + getPort() + "/jsp/generator/release.jsp"); + if (enablePooling) { + Assert.assertFalse(tagTesterTagReleaseReleased); + } else { + Assert.assertTrue(tagTesterTagReleaseReleased); + } + } + private void doTestJsp(String jspName) throws Exception { doTestJsp(jspName, HttpServletResponse.SC_OK); } diff --git a/test/webapp/WEB-INF/bugs.tld b/test/webapp/WEB-INF/bugs.tld index 1fff162c8d60..99b5f18f8cda 100644 --- a/test/webapp/WEB-INF/bugs.tld +++ b/test/webapp/WEB-INF/bugs.tld @@ -113,6 +113,11 @@ org.apache.jasper.compiler.TestGenerator$TesterTagA JSP + + TesterTagRelease + org.apache.jasper.compiler.TestGenerator$TesterTagRelease + JSP + TesterScriptingTag org.apache.jasper.compiler.TestGenerator$TesterScriptingTag diff --git a/test/webapp/jsp/generator/release.jsp b/test/webapp/jsp/generator/release.jsp new file mode 100644 index 000000000000..ae2d1d19f09a --- /dev/null +++ b/test/webapp/jsp/generator/release.jsp @@ -0,0 +1,18 @@ +<%-- + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--%> +<%@ taglib uri="http://tomcat.apache.org/bugs" prefix="bugs" %> + \ No newline at end of file diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml index 6b76e3bd3e10..6e5a27ba4353 100644 --- a/webapps/docs/changelog.xml +++ b/webapps/docs/changelog.xml @@ -169,6 +169,16 @@ + + + + 69399: Fix regression caused by the improvement + 69333 which caused the tag release to be called + when using tag pooling, and to be skipped when not using it. + Patch submitted by Michal Sobkiewicz. (remm) + + +