diff options
author | Greg Wilkins | 2014-05-05 13:12:45 +0000 |
---|---|---|
committer | Greg Wilkins | 2014-05-05 13:12:45 +0000 |
commit | dea8d684a61a5b54605259c350abd3e9e4dfdb2c (patch) | |
tree | a6e8b87d5f16a2d559a0d338777232491dbb8002 | |
parent | 51c5a4c833f1ada8629de3daa0a393bd80c13829 (diff) | |
download | org.eclipse.jetty.project-dea8d684a61a5b54605259c350abd3e9e4dfdb2c.tar.gz org.eclipse.jetty.project-dea8d684a61a5b54605259c350abd3e9e4dfdb2c.tar.xz org.eclipse.jetty.project-dea8d684a61a5b54605259c350abd3e9e4dfdb2c.zip |
434077 Avoid close race in websocket echo test
-rw-r--r-- | jetty-websocket/javax-websocket-server-impl/src/test/java/org/eclipse/jetty/websocket/jsr356/server/JettyEchoSocket.java | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/jetty-websocket/javax-websocket-server-impl/src/test/java/org/eclipse/jetty/websocket/jsr356/server/JettyEchoSocket.java b/jetty-websocket/javax-websocket-server-impl/src/test/java/org/eclipse/jetty/websocket/jsr356/server/JettyEchoSocket.java index c7bb1e03a3..8383bb1769 100644 --- a/jetty-websocket/javax-websocket-server-impl/src/test/java/org/eclipse/jetty/websocket/jsr356/server/JettyEchoSocket.java +++ b/jetty-websocket/javax-websocket-server-impl/src/test/java/org/eclipse/jetty/websocket/jsr356/server/JettyEchoSocket.java @@ -18,6 +18,7 @@ package org.eclipse.jetty.websocket.jsr356.server; +import java.io.EOFException; import java.io.IOException; import java.util.Queue; import java.util.concurrent.TimeUnit; @@ -46,8 +47,8 @@ public class JettyEchoSocket private static final Logger LOG = Log.getLogger(JettyEchoSocket.class); @SuppressWarnings("unused") private Session session; - private RemoteEndpoint remote; - private Boolean closed = null; + private volatile RemoteEndpoint remote; + private volatile Boolean closed = null; private EventQueue<String> incomingMessages = new EventQueue<>(); public Queue<String> awaitMessages(int expected) throws TimeoutException, InterruptedException @@ -92,8 +93,14 @@ public class JettyEchoSocket public void sendMessage(String msg) throws IOException { - remote.sendStringByFuture(msg); - if (remote.getBatchMode() == BatchMode.ON) - remote.flush(); + RemoteEndpoint r = remote; + // TODO there is a race with onClose here and no sufficient memory barrier. Taking a local copy + // stops the worst of the errors, but is probably not the best solution. + if (r==null) + throw new EOFException("Closed="+closed); + + r.sendStringByFuture(msg); + if (r.getBatchMode() == BatchMode.ON) + r.flush(); } } |