From 248f6db82e4fcc56ecf7b7de16cecbb12c4b7b18 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Tue, 24 Dec 2024 08:12:11 -0600 Subject: [PATCH] Fix rare null pointer race condition --- .../render/bufferBuilding/ColumnRenderBuffer.java | 6 ++++-- .../render/bufferBuilding/ColumnRenderBufferBuilder.java | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) 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(); }