Author: kkolinko Date: Sun Jun 22 22:17:20 2014 New Revision: 1604661 URL: http://svn.apache.org/r1604661 Log: Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=56657#c2 Ensure that re-mapping selects the context version that we expect.
Modified: tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java tomcat/trunk/webapps/docs/changelog.xml Modified: tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java?rev=1604661&r1=1604660&r2=1604661&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java (original) +++ tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java Sun Jun 22 22:17:20 2014 @@ -850,14 +850,13 @@ public class CoyoteAdapter implements Ad request.getMappingData().recycle(); } - boolean mapRequired = true; + // Version for the second mapping loop and + // Context that we expect to get for that version String version = null; + Context versionContext = null; + boolean mapRequired = true; while (mapRequired) { - if (version != null) { - // Once we have a version - that is it - mapRequired = false; - } // This will map the the latest version by default connector.getService().getMapper().map(serverName, decodedURI, version, request.getMappingData()); @@ -899,8 +898,13 @@ public class CoyoteAdapter implements Ad sessionID = request.getRequestedSessionId(); - if (mapRequired) { - mapRequired = false; + mapRequired = false; + if (version != null && request.getContext() == versionContext) { + // We got the version that we asked for. That is it. + } else { + version = null; + versionContext = null; + Context[] contexts = request.getMappingData().contexts; // Single contextVersion means no need to remap // No session ID means no possibility of remap @@ -909,11 +913,13 @@ public class CoyoteAdapter implements Ad for (int i = (contexts.length); i > 0; i--) { Context ctxt = contexts[i - 1]; if (ctxt.getManager().findSession(sessionID) != null) { - // We found a context. Is it the one that has already been mapped? + // We found a context. Is it the one that has + // already been mapped? if (!ctxt.equals(request.getMappingData().context)) { - // Set version so second time through mapping the - // correct context is found + // Set version so second time through mapping + // the correct context is found version = ctxt.getWebappVersion(); + versionContext = ctxt; // Reset mapping request.getMappingData().recycle(); mapRequired = true; @@ -923,6 +929,7 @@ public class CoyoteAdapter implements Ad } } } + if (!mapRequired && request.getContext().getPaused()) { // Found a matching context but it is paused. Mapping data will // be wrong since some Wrappers may not be registered at this Modified: tomcat/trunk/webapps/docs/changelog.xml URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1604661&r1=1604660&r2=1604661&view=diff ============================================================================== --- tomcat/trunk/webapps/docs/changelog.xml (original) +++ tomcat/trunk/webapps/docs/changelog.xml Sun Jun 22 22:17:20 2014 @@ -69,7 +69,8 @@ <fix> <bug>56657</bug>: When using parallel deployment, if the same session id matches different versions of a web application, prefer the latest - version. (kkolinko) + version. Ensure that remapping selects the version that we expect. + (kkolinko) </fix> <fix> Assert that mapping result object is empty before performing mapping --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org