From 9b43d8f2e40ad716bcdde2f4c56775ebb75b389c Mon Sep 17 00:00:00 2001 From: Obique PSWG Date: Wed, 13 Jan 2016 12:29:47 -0600 Subject: [PATCH] Fixed concurrent send/close bug in TCPServer --- src/resources/network/TCPServer.java | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/resources/network/TCPServer.java b/src/resources/network/TCPServer.java index eb1ea79dc..620872ec4 100644 --- a/src/resources/network/TCPServer.java +++ b/src/resources/network/TCPServer.java @@ -129,17 +129,19 @@ public class TCPServer { } public boolean send(InetSocketAddress sock, byte [] data) { - SocketChannel sc = sockets.get(sock); - try { - if (sc != null && sc.isConnected()) { - ByteBuffer bb = ByteBuffer.wrap(data); - while (bb.hasRemaining()) - sc.write(bb); - return true; + synchronized (sockets) { + SocketChannel sc = sockets.get(sock); + try { + if (sc != null && sc.isConnected()) { + ByteBuffer bb = ByteBuffer.wrap(data); + while (bb.hasRemaining()) + sc.write(bb); + return true; + } + } catch (IOException e) { + e.printStackTrace(); + disconnect(sc); } - } catch (IOException e) { - e.printStackTrace(); - disconnect(sc); } return false; }