Author: markt
Date: Thu Jun 30 12:16:37 2011
New Revision: 1141502
URL: http://svn.apache.org/viewvc?rev=1141502&view=rev
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=51445
Correctly initialise all instances of Servlets that implement SingleThreadModel.
Based on a patch by Felix Schumacher.
Modified:
tomcat/trunk/java/org/apache/catalina/core/StandardWrapper.java
tomcat/trunk/test/org/apache/catalina/core/TestStandardWrapper.java
tomcat/trunk/webapps/docs/changelog.xml
Modified: tomcat/trunk/java/org/apache/catalina/core/StandardWrapper.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/StandardWrapper.java?rev=1141502&r1=1141501&r2=1141502&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/core/StandardWrapper.java (original)
+++ tomcat/trunk/java/org/apache/catalina/core/StandardWrapper.java Thu Jun 30
12:16:37 2011
@@ -1115,14 +1115,14 @@ public class StandardWrapper extends Con
classLoadTime=(int) (System.currentTimeMillis() -t1);
- initServlet(servlet);
-
- // Register our newly initialized instance
singleThreadModel = servlet instanceof SingleThreadModel;
if (singleThreadModel) {
if (instancePool == null)
instancePool = new Stack<Servlet>();
}
+
+ initServlet(servlet);
+
fireContainerEvent("load", this);
loadTime=System.currentTimeMillis() -t1;
@@ -1186,7 +1186,7 @@ public class StandardWrapper extends Con
private synchronized void initServlet(Servlet servlet)
throws ServletException {
- if (instanceInitialized) return;
+ if (instanceInitialized && !singleThreadModel) return;
// Call the initialization method of this servlet
try {
Modified: tomcat/trunk/test/org/apache/catalina/core/TestStandardWrapper.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/core/TestStandardWrapper.java?rev=1141502&r1=1141501&r2=1141502&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/catalina/core/TestStandardWrapper.java
(original)
+++ tomcat/trunk/test/org/apache/catalina/core/TestStandardWrapper.java Thu Jun
30 12:16:37 2011
@@ -333,7 +333,7 @@ public class TestStandardWrapper extends
public static final int BUG51445_THREAD_COUNT = 5;
- public void testBug51445() throws Exception {
+ public void testBug51445AddServlet() throws Exception {
Tomcat tomcat = getTomcatInstance();
// Must have a real docBase - just use temp
@@ -370,6 +370,46 @@ public class TestStandardWrapper extends
}
+ public void testBug51445AddChild() throws Exception {
+ Tomcat tomcat = getTomcatInstance();
+
+ // Must have a real docBase - just use temp
+ StandardContext ctx = (StandardContext)
+ tomcat.addContext("", System.getProperty("java.io.tmpdir"));
+
+ StandardWrapper wrapper = new StandardWrapper();
+ wrapper.setServletName("Bug51445");
+ wrapper.setServletClass(Bug51445Servlet.class.getName());
+ ctx.addChild(wrapper);
+ ctx.addServletMapping("/", "Bug51445");
+
+ tomcat.start();
+
+ // Start the threads
+ Bug51445Thread[] threads = new Bug51445Thread[5];
+ for (int i = 0; i < BUG51445_THREAD_COUNT; i ++) {
+ threads[i] = new Bug51445Thread(getPort());
+ threads[i].start();
+ }
+
+ // Wait for threads to finish
+ for (int i = 0; i < BUG51445_THREAD_COUNT; i ++) {
+ threads[i].join();
+ }
+
+ Set<String> servlets = new HashSet<String>();
+ // Check the result
+ for (int i = 0; i < BUG51445_THREAD_COUNT; i ++) {
+ String[] results = threads[i].getResult().split(",");
+ assertEquals(2, results.length);
+ assertEquals("10", results[0]);
+ System.out.println(results[1]);
+ assertFalse(servlets.contains(results[1]));
+ servlets.add(results[1]);
+ }
+
+ }
+
private static class Bug51445Thread extends Thread {
private int port;
Modified: tomcat/trunk/webapps/docs/changelog.xml
URL:
http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1141502&r1=1141501&r2=1141502&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/trunk/webapps/docs/changelog.xml Thu Jun 30 12:16:37 2011
@@ -176,6 +176,11 @@
Improve the handling for Servlets that implement the deprecated
SingleThreadModel when embedding Tomcat. (markt)
</fix>
+ <fix>
+ <bug>51445</bug>: Correctly initialise all instances of Servlets that
+ implement SingleThreadModel. Based on a patch by Felix Schumacher.
+ (markt)
+ </fix>
</changelog>
</subsection>
<subsection name="Coyote">
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]