From e0a0ba522256ca3d3e417404de8b11b968f7414c Mon Sep 17 00:00:00 2001 From: s809 <43530948+s809@users.noreply.github.com> Date: Thu, 23 Jan 2025 22:06:20 +0500 Subject: [PATCH] Fix full data source being released too early --- .../file/fullDatafile/RemoteFullDataSourceProvider.java | 5 ++++- .../core/generation/RemoteWorldRetrievalQueue.java | 7 ++++++- .../seibel/distanthorizons/core/level/DhClientLevel.java | 7 +++---- .../client/AbstractFullDataNetworkRequestQueue.java | 7 +++---- 4 files changed, 16 insertions(+), 10 deletions(-) diff --git a/core/src/main/java/com/seibel/distanthorizons/core/file/fullDatafile/RemoteFullDataSourceProvider.java b/core/src/main/java/com/seibel/distanthorizons/core/file/fullDatafile/RemoteFullDataSourceProvider.java index 46ebd66f7..f136ae5cf 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/file/fullDatafile/RemoteFullDataSourceProvider.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/file/fullDatafile/RemoteFullDataSourceProvider.java @@ -99,7 +99,10 @@ public class RemoteFullDataSourceProvider extends GeneratedFullDataSourceProvide Long timestamp = this.getTimestampForPos(pos); if (timestamp != null) { - this.syncOnLoadRequestQueue.submitRequest(pos, timestamp, this::updateDataSource); + this.syncOnLoadRequestQueue.submitRequest(pos, timestamp, fullDataSource -> + { + this.updateDataSourceAsync(fullDataSource).whenComplete((result, throwable) -> fullDataSource.close()); + }); } return super.get(pos); diff --git a/core/src/main/java/com/seibel/distanthorizons/core/generation/RemoteWorldRetrievalQueue.java b/core/src/main/java/com/seibel/distanthorizons/core/generation/RemoteWorldRetrievalQueue.java index b9784cb47..f45953741 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/generation/RemoteWorldRetrievalQueue.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/generation/RemoteWorldRetrievalQueue.java @@ -16,6 +16,7 @@ import org.apache.logging.log4j.Logger; import java.util.ArrayList; import java.util.List; +import java.util.Objects; import java.util.concurrent.*; public class RemoteWorldRetrievalQueue extends AbstractFullDataNetworkRequestQueue implements IFullDataSourceRetrievalQueue, IDebugRenderable @@ -56,7 +57,11 @@ public class RemoteWorldRetrievalQueue extends AbstractFullDataNetworkRequestQue { long generationStartMsTime = System.currentTimeMillis(); - return super.submitRequest(sectionPos, tracker.getDataSourceConsumer()) + + return super.submitRequest(sectionPos, fullDataSource -> { + Objects.requireNonNull(tracker.getDataSourceConsumer()).accept(fullDataSource); + fullDataSource.close(); + }) .thenApply(requestResult -> { long totalGenTimeInMs = System.currentTimeMillis() - generationStartMsTime; diff --git a/core/src/main/java/com/seibel/distanthorizons/core/level/DhClientLevel.java b/core/src/main/java/com/seibel/distanthorizons/core/level/DhClientLevel.java index 11e615898..314078b1b 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/level/DhClientLevel.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/level/DhClientLevel.java @@ -142,10 +142,9 @@ public class DhClientLevel extends AbstractDhLevel implements IDhClientLevel } this.updateBeaconBeamsForSectionPos(dataSourceDto.pos, message.payload.beaconBeams); - try (FullDataSourceV2 fullDataSource = dataSourceDto.createDataSource(this.levelWrapper)) - { - this.updateDataSourcesAsync(fullDataSource); - } + + FullDataSourceV2 fullDataSource = dataSourceDto.createDataSource(this.levelWrapper); + this.updateDataSourcesAsync(fullDataSource).whenComplete((result, e) -> fullDataSource.close()); } catch (Exception e) { diff --git a/core/src/main/java/com/seibel/distanthorizons/core/multiplayer/client/AbstractFullDataNetworkRequestQueue.java b/core/src/main/java/com/seibel/distanthorizons/core/multiplayer/client/AbstractFullDataNetworkRequestQueue.java index d78d3736f..bd8830d47 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/multiplayer/client/AbstractFullDataNetworkRequestQueue.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/multiplayer/client/AbstractFullDataNetworkRequestQueue.java @@ -241,10 +241,9 @@ public abstract class AbstractFullDataNetworkRequestQueue implements IDebugRende try { this.level.updateBeaconBeamsForSectionPos(dataSourceDto.pos, response.payload.beaconBeams); - try (FullDataSourceV2 fullDataSource = dataSourceDto.createDataSource(this.level.getLevelWrapper())) - { - entry.dataSourceConsumer.accept(fullDataSource); - } + + FullDataSourceV2 fullDataSource = dataSourceDto.createDataSource(this.level.getLevelWrapper()); + entry.dataSourceConsumer.accept(fullDataSource); } catch (Exception e) {