Author: markt Date: Mon Mar 25 17:49:08 2013 New Revision: 1460780 URL: http://svn.apache.org/r1460780 Log: Code review while looking at https://issues.apache.org/bugzilla/show_bug.cgi?id=54746 Prevent recursive close calls.
Modified: tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java Modified: tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java?rev=1460780&r1=1460779&r2=1460780&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java (original) +++ tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java Mon Mar 25 17:49:08 2013 @@ -257,7 +257,7 @@ public class WsSession implements Sessio @Override public boolean isOpen() { - return state == State.OPEN; + return state == State.OPEN || state == State.PRE_CLOSING; } @@ -336,11 +336,16 @@ public class WsSession implements Sessio if (state != State.OPEN) { return; } + synchronized (stateLock) { if (state != State.OPEN) { return; } + // This state exists to protect against recursive calls to close() + // from Endpoint.onClose() + state = State.PRE_CLOSING; + fireEndpointOnClose(closeReason); state = State.CLOSING; @@ -514,6 +519,7 @@ public class WsSession implements Sessio private static enum State { OPEN, + PRE_CLOSING, CLOSING, CLOSED } --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org