DatagramPackets are synchronized. This could have caused problems, or would, cause problems.

This commit is contained in:
Manevolent
2018-09-17 22:55:34 -04:00
parent e683ad1bbb
commit ec34b59ad3
@@ -44,8 +44,6 @@ public class LocalTeamspeakClientSocket
private DatagramSocket socket; private DatagramSocket socket;
private final DatagramPacket packet = new DatagramPacket(new byte[500], 500);
private final Map<String, CommandProcessor> namedProcessors = new HashMap<>(); private final Map<String, CommandProcessor> namedProcessors = new HashMap<>();
private ExecutorService commandExecutionService = Executors.newSingleThreadExecutor(); private ExecutorService commandExecutionService = Executors.newSingleThreadExecutor();
private final Object commandSendLock = new Object(); private final Object commandSendLock = new Object();
@@ -198,6 +196,7 @@ public class LocalTeamspeakClientSocket
DatagramSocket socket = this.socket; DatagramSocket socket = this.socket;
InetSocketAddress remote = this.remote; InetSocketAddress remote = this.remote;
final DatagramPacket packet = new DatagramPacket(new byte[500], 500);
while (socket.isBound()) { while (socket.isBound()) {
socket.setSoTimeout(timeout); socket.setSoTimeout(timeout);
@@ -341,15 +340,24 @@ public class LocalTeamspeakClientSocket
Ts3Debugging.debug("Connecting to " + remote + "..."); Ts3Debugging.debug("Connecting to " + remote + "...");
// Set clid
setClientId(0); setClientId(0);
// Resolve remote
if (remote.isUnresolved()) if (remote.isUnresolved())
remote = new InetSocketAddress(remote.getAddress().getHostAddress(), remote.getPort()); remote = new InetSocketAddress(remote.getAddress().getHostAddress(), remote.getPort());
if (socket != null) socket.close(); // Release old socket (if any)
if (socket != null && !socket.isClosed())
socket.close();
// Construct new socket
socket = new DatagramSocket(); socket = new DatagramSocket();
// Bind to remote
this.remote = remote; this.remote = remote;
// Free stuff
serverId = null; serverId = null;
awaitingCommands.clear(); awaitingCommands.clear();
acceptingReturnCode = 0; acceptingReturnCode = 0;