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: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to