From: markt Date: Sun, 31 Jul 2011 19:34:14 +0000 (+0000) Subject: Ensure that calls to StandardWrapper methods() that may trigger creation of a Servlet... X-Git-Url: https://git.internetallee.de/?a=commitdiff_plain;h=2340156f1b887c416dac52b58ecfb86f3e8bd43b;p=tomcat7.0 Ensure that calls to StandardWrapper methods() that may trigger creation of a Servlet instance always do so in way that correctly instantiates a Servlet instance. git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@1152621 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/java/org/apache/catalina/core/StandardWrapper.java b/java/org/apache/catalina/core/StandardWrapper.java index 2c154d699..e5023cfed 100644 --- a/java/org/apache/catalina/core/StandardWrapper.java +++ b/java/org/apache/catalina/core/StandardWrapper.java @@ -566,8 +566,18 @@ public class StandardWrapper extends ContainerBase */ public boolean isSingleThreadModel() { + // Short-cuts + // If singleThreadModel is true, must have already checked this + // If instance != null, must have already loaded + if (singleThreadModel || instance != null) { + return singleThreadModel; + } + + // The logic to determine this safely is more complex than one might + // expect. allocate() already has the necessary logic so re-use it. try { - loadServlet(); + Servlet s = allocate(); + deallocate(s); } catch (Throwable t) { ExceptionUtils.handleThrowable(t); } @@ -608,7 +618,9 @@ public class StandardWrapper extends ContainerBase @Override public String[] getServletMethods() throws ServletException { - Class servletClazz = loadServlet().getClass(); + instance = loadServlet(); + + Class servletClazz = instance.getClass(); if (!javax.servlet.http.HttpServlet.class.isAssignableFrom( servletClazz)) { return DEFAULT_SERVLET_METHODS; diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml index 2a99a4b27..e87b7a1f0 100644 --- a/webapps/docs/changelog.xml +++ b/webapps/docs/changelog.xml @@ -109,6 +109,11 @@ 51588: Make it easier to extend the AccessLogValve to add support for custom elements. (markt) + + Ensure that calls to StandardWrapper methods() that may trigger creation + of a Servlet instance always do so in way that correctly instantiates a + Servlet instance. (markt) +