forked from j62/ctbrec
1
0
Fork 0

Fix ConcurrentModificationException

This commit is contained in:
0xb00bface 2021-08-07 14:12:49 +02:00
parent df54d1f3ec
commit f20a364f65
2 changed files with 24 additions and 7 deletions

View File

@ -17,6 +17,7 @@ import java.time.ZoneId;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.NoSuchElementException; import java.util.NoSuchElementException;
@ -68,6 +69,7 @@ public class NextGenLocalRecorder implements Recorder {
private Config config; private Config config;
private volatile boolean recording = true; private volatile boolean recording = true;
private ReentrantLock recorderLock = new ReentrantLock(); private ReentrantLock recorderLock = new ReentrantLock();
private ReentrantLock modelGroupLock = new ReentrantLock();
private RecorderHttpClient client = new RecorderHttpClient(); private RecorderHttpClient client = new RecorderHttpClient();
private Map<Model, Recording> recordingProcesses = Collections.synchronizedMap(new HashMap<>()); private Map<Model, Recording> recordingProcesses = Collections.synchronizedMap(new HashMap<>());
private RecordingManager recordingManager; private RecordingManager recordingManager;
@ -808,20 +810,35 @@ public class NextGenLocalRecorder implements Recorder {
@Override @Override
public Set<ModelGroup> getModelGroups() { public Set<ModelGroup> getModelGroups() {
return config.getSettings().modelGroups; modelGroupLock.lock();
try {
return new HashSet<>(config.getSettings().modelGroups);
} finally {
modelGroupLock.unlock();
}
} }
@Override @Override
public void saveModelGroup(ModelGroup group) throws IOException { public void saveModelGroup(ModelGroup group) throws IOException {
Set<ModelGroup> modelGroups = config.getSettings().modelGroups; Set<ModelGroup> modelGroups = config.getSettings().modelGroups;
modelGroups.remove(group); modelGroupLock.lock();
modelGroups.add(group); try {
config.save(); modelGroups.remove(group);
modelGroups.add(group);
config.save();
} finally {
modelGroupLock.unlock();
}
} }
@Override @Override
public void deleteModelGroup(ModelGroup group) throws IOException { public void deleteModelGroup(ModelGroup group) throws IOException {
config.getSettings().modelGroups.remove(group); modelGroupLock.lock();
config.save(); try {
config.getSettings().modelGroups.remove(group);
config.save();
} finally {
modelGroupLock.unlock();
}
} }
} }

View File

@ -691,7 +691,7 @@ public class RemoteRecorder implements Recorder {
@Override @Override
public Set<ModelGroup> getModelGroups() { public Set<ModelGroup> getModelGroups() {
return modelGroups; return new HashSet<>(modelGroups);
} }
@Override @Override