Author: markt
Date: Thu Sep 17 07:42:37 2015
New Revision: 1703509
URL: http://svn.apache.org/r1703509
Log:
Fix https://bz.apache.org/bugzilla/show_bug.cgi?id=58387
Fix rare data race
Modified:
tomcat/trunk/java/org/apache/coyote/AbstractProcessor.java
tomcat/trunk/java/org/apache/coyote/Request.java
tomcat/trunk/java/org/apache/coyote/Response.java
Modified: tomcat/trunk/java/org/apache/coyote/AbstractProcessor.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/AbstractProcessor.java?rev=1703509&r1=1703508&r2=1703509&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/AbstractProcessor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/AbstractProcessor.java Thu Sep 17
07:42:37 2015
@@ -85,6 +85,7 @@ public abstract class AbstractProcessor
response = coyoteResponse;
response.setHook(this);
request.setResponse(response);
+ request.setHook(this);
}
/**
Modified: tomcat/trunk/java/org/apache/coyote/Request.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/Request.java?rev=1703509&r1=1703508&r2=1703509&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/Request.java (original)
+++ tomcat/trunk/java/org/apache/coyote/Request.java Thu Sep 17 07:42:37 2015
@@ -131,7 +131,7 @@ public final class Request {
private final HashMap<String,Object> attributes = new HashMap<>();
private Response response;
- private ActionHook hook;
+ private volatile ActionHook hook;
private long bytesRead=0;
// Time of the request - useful to avoid repeated calls to
System.currentTime
@@ -350,18 +350,18 @@ public final class Request {
return response;
}
- public void setResponse( Response response ) {
- this.response=response;
- response.setRequest( this );
+ public void setResponse(Response response) {
+ this.response = response;
+ response.setRequest(this);
}
- public void action(ActionCode actionCode, Object param) {
- if( hook==null && response!=null ) {
- hook=response.getHook();
- }
+ protected void setHook(ActionHook hook) {
+ this.hook = hook;
+ }
+ public void action(ActionCode actionCode, Object param) {
if (hook != null) {
- if( param==null ) {
+ if (param == null) {
hook.action(actionCode, this);
} else {
hook.action(actionCode, param);
Modified: tomcat/trunk/java/org/apache/coyote/Response.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/Response.java?rev=1703509&r1=1703508&r2=1703509&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/Response.java (original)
+++ tomcat/trunk/java/org/apache/coyote/Response.java Thu Sep 17 07:42:37 2015
@@ -94,7 +94,7 @@ public final class Response {
/**
* Action hook.
*/
- public ActionHook hook;
+ protected volatile ActionHook hook;
/**
@@ -143,19 +143,13 @@ public final class Response {
}
- public ActionHook getHook() {
- return hook;
- }
-
-
- public void setHook(ActionHook hook) {
+ protected void setHook(ActionHook hook) {
this.hook = hook;
}
// -------------------- Per-Response "notes" --------------------
-
public final void setNote(int pos, Object value) {
notes[pos] = value;
}
@@ -168,20 +162,19 @@ public final class Response {
// -------------------- Actions --------------------
-
public void action(ActionCode actionCode, Object param) {
if (hook != null) {
- if( param==null )
+ if (param == null) {
hook.action(actionCode, this);
- else
+ } else {
hook.action(actionCode, param);
+ }
}
}
// -------------------- State --------------------
-
public int getStatus() {
return status;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]