You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2015/02/23 21:36:30 UTC
svn commit: r1661770 -
/tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java
Author: markt
Date: Mon Feb 23 20:36:29 2015
New Revision: 1661770
URL: http://svn.apache.org/r1661770
Log:
Fix hanging WebSocket unit test on Windows.
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=1661770&r1=1661769&r2=1661770&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java Mon Feb 23 20:36:29 2015
@@ -473,12 +473,10 @@ public class WsSession implements Sessio
fireEndpointOnError(e);
}
- state = State.CLOSING;
+ state = State.OUTPUT_CLOSED;
sendCloseMessage(closeReasonMessage);
fireEndpointOnClose(closeReasonLocal);
-
- state = State.CLOSED;
}
IOException ioe = new IOException(sm.getString("wsSession.messageFailed"));
@@ -500,7 +498,7 @@ public class WsSession implements Sessio
public void onClose(CloseReason closeReason) {
synchronized (stateLock) {
- if (state == State.OPEN) {
+ if (state != State.CLOSED) {
try {
wsRemoteEndpoint.setBatchingAllowed(false);
} catch (IOException e) {
@@ -510,10 +508,10 @@ public class WsSession implements Sessio
sendCloseMessage(closeReason);
fireEndpointOnClose(closeReason);
state = State.CLOSED;
- }
- // Close the socket
- wsRemoteEndpoint.close();
+ // Close the socket
+ wsRemoteEndpoint.close();
+ }
}
}
@@ -733,13 +731,17 @@ public class WsSession implements Sessio
private void checkState() {
if (state == State.CLOSED) {
+ /*
+ * As per RFC 6455, a WebSocket connection is considered to be
+ * closed once a peer has sent and received a WebSocket close frame.
+ */
throw new IllegalStateException(sm.getString("wsSession.closed", id));
}
}
private static enum State {
OPEN,
- CLOSING,
+ OUTPUT_CLOSED,
CLOSED
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org
Re: svn commit: r1661770 - /tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java
Posted by Mark Thomas <ma...@apache.org>.
On 23/02/2015 20:36, markt@apache.org wrote:
> Author: markt
> Date: Mon Feb 23 20:36:29 2015
> New Revision: 1661770
>
> URL: http://svn.apache.org/r1661770
> Log:
> Fix hanging WebSocket unit test on Windows.
For the record the problematic sequence was:
- Client sent message
- Client closed session (sent close to server)
- Server echoed message to client
- Client ignored this since the session was closed
- Server hangs waiting for client to read the message
- Client tried again to close the session
The new sequence is
- Client sends message
- Client closes session (sends close to server)
- Server echoes message to client
- Client processes message
- Server received close and processes it (returning close to client)
- Server closes connection
- Client processed returned close
- Client closes connection
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org