From b00ae8eec1ef0aa5094fca7fad918a437603eb12 Mon Sep 17 00:00:00 2001 From: Harshvardhan Gupta <95761669+Harsh5488@users.noreply.github.com> Date: Wed, 10 Jul 2024 14:40:17 +0530 Subject: [PATCH] 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 --- src/main/java/io/socket/client/Socket.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/io/socket/client/Socket.java b/src/main/java/io/socket/client/Socket.java index 49bc378..7e131d0 100644 --- a/src/main/java/io/socket/client/Socket.java +++ b/src/main/java/io/socket/client/Socket.java @@ -61,8 +61,8 @@ public class Socket extends Emitter { private Map auth; private Map acks = new HashMap<>(); private Queue subs; - private final Queue> receiveBuffer = new LinkedList<>(); - private final Queue> sendBuffer = new LinkedList<>(); + private final Queue> receiveBuffer = new ConcurrentLinkedQueue<>(); + private final Queue> sendBuffer = new ConcurrentLinkedQueue<>(); private ConcurrentLinkedQueue onAnyIncomingListeners = new ConcurrentLinkedQueue<>(); private ConcurrentLinkedQueue onAnyOutgoingListeners = new ConcurrentLinkedQueue<>();