fix: make sendBuffer thread safe (#769)

Clearing the buffer upon timeout could lead to:

```
java.util.ConcurrentModificationException
	at java.base/java.util.LinkedList$ListItr.checkForComodification(LinkedList.java:970)
	at java.base/java.util.LinkedList$ListItr.next(LinkedList.java:892)
	at io.socket.client.Socket$6$1.run(Socket.java:232)
	at java.base/java.util.TimerThread.mainLoop(Timer.java:556)
	at java.base/java.util.TimerThread.run(Timer.java:506)
```

Related:

- https://github.com/socketio/socket.io-client-java/issues/710
- https://github.com/socketio/socket.io-client-java/issues/727
- https://github.com/socketio/socket.io-client-java/pull/758
- https://github.com/socketio/socket.io-client-java/issues/759
This commit is contained in:
Harshvardhan Gupta
2024-07-10 14:40:17 +05:30
committed by GitHub
parent 774543ef57
commit b00ae8eec1

View File

@@ -61,8 +61,8 @@ public class Socket extends Emitter {
private Map<String, String> auth;
private Map<Integer, Ack> acks = new HashMap<>();
private Queue<On.Handle> subs;
private final Queue<List<Object>> receiveBuffer = new LinkedList<>();
private final Queue<Packet<JSONArray>> sendBuffer = new LinkedList<>();
private final Queue<List<Object>> receiveBuffer = new ConcurrentLinkedQueue<>();
private final Queue<Packet<JSONArray>> sendBuffer = new ConcurrentLinkedQueue<>();
private ConcurrentLinkedQueue<Listener> onAnyIncomingListeners = new ConcurrentLinkedQueue<>();
private ConcurrentLinkedQueue<Listener> onAnyOutgoingListeners = new ConcurrentLinkedQueue<>();