Author: markt
Date: Fri Dec 18 11:17:34 2015
New Revision: 1720752
URL: http://svn.apache.org/viewvc?rev=1720752&view=rev
Log:
Fix https://bz.apache.org/bugzilla/show_bug.cgi?id=58702
Ensure an access log entry is generated if the client aborts the connection.
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=1720752&r1=1720751&r2=1720752&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java
(original)
+++ tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java Fri Dec
18 11:17:34 2015
@@ -246,15 +246,6 @@ public class CoyoteAdapter implements Ad
if (!request.isAsync()) {
request.finishRequest();
response.finishResponse();
- if (request.getMappingData().context != null) {
- request.getMappingData().context.logAccess(
- request, response,
- System.currentTimeMillis() - req.getStartTime(),
- false);
- } else {
- // Should normally not happen
- log(req, res, System.currentTimeMillis() -
req.getStartTime());
- }
}
// Check to see if the processor is in an error state. If it is,
@@ -274,12 +265,21 @@ public class CoyoteAdapter implements Ad
} finally {
if (!success) {
res.setStatus(500);
+ }
+
+ // Access logging
+ if (!success || !request.isAsync()) {
long time = 0;
if (req.getStartTime() != -1) {
time = System.currentTimeMillis() - req.getStartTime();
}
- log(req, res, time);
+ if (request.getMappingData().context != null) {
+ request.getMappingData().context.logAccess(request,
response, time, false);
+ } else {
+ log(req, res, time);
+ }
}
+
req.getRequestProcessor().setWorkerThreadName(null);
// Recycle the wrapper request and response
if (!success || !request.isAsync()) {
@@ -290,6 +290,7 @@ public class CoyoteAdapter implements Ad
return success;
}
+
/**
* Service method.
*/
@@ -328,13 +329,13 @@ public class CoyoteAdapter implements Ad
}
boolean async = false;
+ boolean postParseSuccess = false;
try {
-
// Parse and set Catalina and configuration specific
// request parameters
req.getRequestProcessor().setWorkerThreadName(THREAD_NAME.get());
- boolean postParseSuccess = postParseRequest(req, request, res,
response);
+ postParseSuccess = postParseRequest(req, request, res, response);
if (postParseSuccess) {
//check valves if we support async
request.setAsyncSupported(connector.getService().getContainer().getPipeline().isAsyncSupported());
@@ -361,6 +362,13 @@ public class CoyoteAdapter implements Ad
} else {
request.finishRequest();
response.finishResponse();
+ }
+
+ } catch (IOException e) {
+ // Ignore
+ } finally {
+ // Access log
+ if (!async) {
if (postParseSuccess) {
// Log only if processing was invoked.
// If postParseRequest() failed, it has already logged it.
@@ -371,12 +379,10 @@ public class CoyoteAdapter implements Ad
}
}
- } catch (IOException e) {
- // Ignore
- } finally {
req.getRequestProcessor().setWorkerThreadName(null);
AtomicBoolean error = new AtomicBoolean(false);
res.action(ActionCode.IS_ERROR, error);
+
// Recycle the wrapper request and response
if (!async || error.get()) {
request.recycle();
Modified: tomcat/trunk/webapps/docs/changelog.xml
URL:
http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1720752&r1=1720751&r2=1720752&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/trunk/webapps/docs/changelog.xml Fri Dec 18 11:17:34 2015
@@ -143,6 +143,10 @@
the failure of the web application. Includes a test case written by
Derek Abdine. (markt)
</fix>
+ <fix>
+ <bug>58702</bug>: Ensure an access log entry is generated if the client
+ aborts the connection. (markt)
+ </fix>
</changelog>
</subsection>
<subsection name="Coyote">
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]