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