From 7218ed04fbace85ec175410e56ff1e49d1f84fd0 Mon Sep 17 00:00:00 2001 From: 0xb00bface <0xboobface@gmail.com> Date: Sun, 8 Aug 2021 19:39:05 +0200 Subject: [PATCH] Fix ConcurrentModificationException in RemoteRecorder --- .../java/ctbrec/recorder/RemoteRecorder.java | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/common/src/main/java/ctbrec/recorder/RemoteRecorder.java b/common/src/main/java/ctbrec/recorder/RemoteRecorder.java index cfb5fd54..441e157e 100644 --- a/common/src/main/java/ctbrec/recorder/RemoteRecorder.java +++ b/common/src/main/java/ctbrec/recorder/RemoteRecorder.java @@ -15,6 +15,7 @@ import java.util.List; import java.util.Optional; import java.util.Set; import java.util.UUID; +import java.util.concurrent.locks.ReentrantLock; import org.json.JSONObject; import org.slf4j.Logger; @@ -70,6 +71,7 @@ public class RemoteRecorder implements Recorder { private List models = Collections.emptyList(); private List onlineModels = Collections.emptyList(); private List recordings = Collections.emptyList(); + private ReentrantLock modelGroupLock = new ReentrantLock(); private Set modelGroups = new HashSet<>(); private List sites; private long spaceTotal = -1; @@ -202,8 +204,13 @@ public class RemoteRecorder implements Recorder { throw new IOException("Server returned error " + resp.status + " " + resp.msg); } - modelGroups.clear(); - modelGroups.addAll(resp.groups); + modelGroupLock.lock(); + try { + modelGroups.clear(); + modelGroups.addAll(resp.groups); + } finally { + modelGroupLock.unlock(); + } } private void addHmacIfNeeded(String msg, Builder builder) throws InvalidKeyException, NoSuchAlgorithmException, UnsupportedEncodingException { @@ -691,7 +698,12 @@ public class RemoteRecorder implements Recorder { @Override public Set getModelGroups() { - return new HashSet<>(modelGroups); + modelGroupLock.lock(); + try { + return new HashSet<>(modelGroups); + } finally { + modelGroupLock.unlock(); + } } @Override