diff --git a/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/render/bufferBuilding/ColumnRenderBuffer.java b/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/render/bufferBuilding/ColumnRenderBuffer.java index f8e2b6202..f1f4cd8bf 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/render/bufferBuilding/ColumnRenderBuffer.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/render/bufferBuilding/ColumnRenderBuffer.java @@ -84,9 +84,11 @@ public class ColumnRenderBuffer implements AutoCloseable /** Should be run on a DH thread. */ public synchronized CompletableFuture makeAndUploadBuffersAsync(LodQuadBuilder builder, EDhApiGpuUploadMethod gpuUploadMethod) { - if (this.uploadFuture != null) + // separate variable to prevent race condition when checking null + CompletableFuture future = this.uploadFuture; + if (future != null) { - return this.uploadFuture; + return future; } this.uploadFuture = new CompletableFuture<>(); diff --git a/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/render/bufferBuilding/ColumnRenderBufferBuilder.java b/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/render/bufferBuilding/ColumnRenderBufferBuilder.java index 41a12a20e..fee532898 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/render/bufferBuilding/ColumnRenderBufferBuilder.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/render/bufferBuilding/ColumnRenderBufferBuilder.java @@ -73,7 +73,7 @@ public class ColumnRenderBufferBuilder uploadFuture.whenComplete((uploadedBuffer, exception) -> { // clean up if not uploaded - if (!uploadedBuffer.buffersUploaded) + if (uploadedBuffer != null && !uploadedBuffer.buffersUploaded) { uploadedBuffer.close(); }