Skip to content

Commit 9ad786e

Browse files
committed
fix: hopefully fix a race condition with stale region purge
1 parent 3b399d6 commit 9ad786e

File tree

1 file changed

+12
-10
lines changed

1 file changed

+12
-10
lines changed

common/src/main/java/dev/ftb/mods/ftbchunks/client/map/MapManager.java

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -351,17 +351,19 @@ public void scheduleRegionPurge(MapDimension toPurge) {
351351

352352
public void checkForRegionPurge() {
353353
if (pendingRegionPurge != null) {
354-
int autoRelease = FTBChunksClientConfig.AUTORELEASE_ON_MAP_CLOSE.get();
355-
List<MapRegion> dataLoadedRegions = pendingRegionPurge.getLoadedRegions().stream().filter(MapRegion::isDataLoaded).toList();
356-
long nLoaded = dataLoadedRegions.size();
357-
autoRelease = Math.max(4, autoRelease); // not useful to release regions which will be reloaded pretty much immediately
358-
if (nLoaded > autoRelease) {
359-
dataLoadedRegions.stream()
360-
.sorted(Comparator.comparingLong(MapRegion::getLastDataAccess))
361-
.limit(nLoaded - autoRelease)
362-
.forEach(r -> r.release(false));
354+
synchronized (lock) {
355+
int autoRelease = FTBChunksClientConfig.AUTORELEASE_ON_MAP_CLOSE.get();
356+
List<MapRegion> dataLoadedRegions = pendingRegionPurge.getLoadedRegions().stream().filter(MapRegion::isDataLoaded).toList();
357+
long nLoaded = dataLoadedRegions.size();
358+
autoRelease = Math.max(4, autoRelease); // not useful to release regions which will be reloaded pretty much immediately
359+
if (nLoaded > autoRelease) {
360+
dataLoadedRegions.stream()
361+
.sorted(Comparator.comparingLong(MapRegion::getLastDataAccess))
362+
.limit(nLoaded - autoRelease)
363+
.forEach(r -> r.release(false));
364+
}
365+
pendingRegionPurge = null;
363366
}
364-
pendingRegionPurge = null;
365367
}
366368
}
367369
}

0 commit comments

Comments
 (0)