You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by cr...@apache.org on 2001/08/23 18:42:27 UTC
cvs commit: jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets InvokerServlet.java
craigmcc 01/08/23 09:42:27
Modified: catalina/src/share/org/apache/catalina/core
StandardWrapper.java
catalina/src/share/org/apache/catalina/servlets
InvokerServlet.java
Log:
Fix the race condition on the invoker servlet for real this time. It
helps if you include *all* of the critical section code inside the
synchronized block.
PR: Bugzilla #3188
Submitted by: Eddie Ruvinsky
Revision Changes Path
1.29 +8 -5 jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/StandardWrapper.java
Index: StandardWrapper.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/StandardWrapper.java,v
retrieving revision 1.28
retrieving revision 1.29
diff -u -r1.28 -r1.29
--- StandardWrapper.java 2001/08/16 02:46:52 1.28
+++ StandardWrapper.java 2001/08/23 16:42:26 1.29
@@ -1,7 +1,7 @@
/*
- * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/StandardWrapper.java,v 1.28 2001/08/16 02:46:52 craigmcc Exp $
- * $Revision: 1.28 $
- * $Date: 2001/08/16 02:46:52 $
+ * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/StandardWrapper.java,v 1.29 2001/08/23 16:42:26 craigmcc Exp $
+ * $Revision: 1.29 $
+ * $Date: 2001/08/23 16:42:26 $
*
* ====================================================================
*
@@ -105,7 +105,7 @@
* make them efficient are counter-productive.
*
* @author Craig R. McClanahan
- * @version $Revision: 1.28 $ $Date: 2001/08/16 02:46:52 $
+ * @version $Revision: 1.29 $ $Date: 2001/08/23 16:42:26 $
*/
public final class StandardWrapper
@@ -1133,7 +1133,10 @@
protected String logName() {
StringBuffer sb = new StringBuffer("StandardWrapper[");
- sb.append(getParent().getName());
+ if (getParent() != null)
+ sb.append(getParent().getName());
+ else
+ sb.append("null");
sb.append(':');
sb.append(getName());
sb.append(']');
1.12 +22 -21 jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/InvokerServlet.java
Index: InvokerServlet.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/InvokerServlet.java,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- InvokerServlet.java 2001/08/20 22:43:52 1.11
+++ InvokerServlet.java 2001/08/23 16:42:26 1.12
@@ -1,7 +1,7 @@
/*
- * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/InvokerServlet.java,v 1.11 2001/08/20 22:43:52 craigmcc Exp $
- * $Revision: 1.11 $
- * $Date: 2001/08/20 22:43:52 $
+ * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/InvokerServlet.java,v 1.12 2001/08/23 16:42:26 craigmcc Exp $
+ * $Revision: 1.12 $
+ * $Date: 2001/08/23 16:42:26 $
*
* ====================================================================
*
@@ -87,7 +87,7 @@
* in the web application deployment descriptor.
*
* @author Craig R. McClanahan
- * @version $Revision: 1.11 $ $Date: 2001/08/20 22:43:52 $
+ * @version $Revision: 1.12 $ $Date: 2001/08/23 16:42:26 $
*/
public final class InvokerServlet
@@ -326,26 +326,27 @@
String pattern = inServletPath + "/" + servletClass + "/*";
Wrapper wrapper = null;
- // Are we referencing an existing servlet name?
- wrapper = (Wrapper) context.findChild(servletClass);
- if (wrapper != null) {
- if (debug >= 1)
- log("Using wrapper for servlet '" +
- wrapper.getName() + "' with mapping '" + pattern + "'");
- context.addServletMapping(pattern, wrapper.getName());
- }
+ // Synchronize to avoid race conditions when multiple requests
+ // try to initialize the same servlet at the same time
+ synchronized (this) {
+
+ // Are we referencing an existing servlet name?
+ wrapper = (Wrapper) context.findChild(servletClass);
+ if (wrapper != null) {
+ if (debug >= 1)
+ log("Using wrapper for servlet '" +
+ wrapper.getName() + "' with mapping '" +
+ pattern + "'");
+ context.addServletMapping(pattern, wrapper.getName());
+ }
- // No, create a new wrapper for the specified servlet class
- else {
+ // No, create a new wrapper for the specified servlet class
+ else {
- if (debug >= 1)
- log("Creating wrapper for '" + servletClass +
- "' with mapping '" + pattern + "'");
+ if (debug >= 1)
+ log("Creating wrapper for '" + servletClass +
+ "' with mapping '" + pattern + "'");
- // Create and install a new wrapper (synchronized to avoid
- // race conditions when multiple requests try to initialize
- // the same servlet at the same time)
- synchronized (this) {
try {
wrapper = context.createWrapper();
wrapper.setName(name);