Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGreg Wilkins2014-05-05 13:12:45 +0000
committerGreg Wilkins2014-05-05 13:12:45 +0000
commitdea8d684a61a5b54605259c350abd3e9e4dfdb2c (patch)
treea6e8b87d5f16a2d559a0d338777232491dbb8002
parent51c5a4c833f1ada8629de3daa0a393bd80c13829 (diff)
downloadorg.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.java17
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();
}
}

Back to the top