From 5fef7dc66b0c0018a8995d5e152ed05e296f7897 Mon Sep 17 00:00:00 2001 From: Phoenix-Starlight <64714532+Phoenix-Starlight@users.noreply.github.com> Date: Thu, 31 Aug 2023 04:56:38 -0700 Subject: [PATCH] Fix dynamic resources ModelManager leak (#231) The opened BufferedReader was not being closed, and apparently the cleaner/finalize mechanism doesn't exist for it --- .../perf/dynamic_resources/ModelManagerMixin.java | 9 +++++---- .../perf/dynamic_resources/ModelManagerMixin.java | 13 ++++++++----- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/fabric/src/main/java/org/embeddedt/modernfix/fabric/mixin/perf/dynamic_resources/ModelManagerMixin.java b/fabric/src/main/java/org/embeddedt/modernfix/fabric/mixin/perf/dynamic_resources/ModelManagerMixin.java index ce620eed..62179e16 100644 --- a/fabric/src/main/java/org/embeddedt/modernfix/fabric/mixin/perf/dynamic_resources/ModelManagerMixin.java +++ b/fabric/src/main/java/org/embeddedt/modernfix/fabric/mixin/perf/dynamic_resources/ModelManagerMixin.java @@ -16,6 +16,7 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; +import java.io.BufferedReader; import java.io.IOException; import java.util.List; import java.util.Map; @@ -43,8 +44,8 @@ public class ModelManagerMixin { private BlockModel loadSingleBlockModel(ResourceManager manager, ResourceLocation location) { return manager.getResource(location).map(resource -> { - try { - return BlockModel.fromStream(resource.openAsReader()); + try (BufferedReader reader = resource.openAsReader()) { + return BlockModel.fromStream(reader); } catch(IOException e) { ModernFix.LOGGER.error("Couldn't load model", e); return null; @@ -54,8 +55,8 @@ public class ModelManagerMixin { private List loadSingleBlockState(ResourceManager manager, ResourceLocation location) { return manager.getResourceStack(location).stream().map(resource -> { - try { - return new ModelBakery.LoadedJson(resource.sourcePackId(), GsonHelper.parse(resource.openAsReader())); + try (BufferedReader reader = resource.openAsReader()) { + return new ModelBakery.LoadedJson(resource.sourcePackId(), GsonHelper.parse(reader)); } catch(IOException e) { ModernFix.LOGGER.error("Couldn't load blockstate", e); return null; diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/dynamic_resources/ModelManagerMixin.java b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/dynamic_resources/ModelManagerMixin.java index 4e7cbfd3..98066097 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/dynamic_resources/ModelManagerMixin.java +++ b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/dynamic_resources/ModelManagerMixin.java @@ -16,8 +16,11 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; +import java.io.BufferedReader; import java.io.IOException; -import java.util.*; +import java.util.List; +import java.util.Map; +import java.util.Objects; import java.util.concurrent.CompletableFuture; import java.util.concurrent.Executor; import java.util.stream.Collectors; @@ -41,8 +44,8 @@ public class ModelManagerMixin { private BlockModel loadSingleBlockModel(ResourceManager manager, ResourceLocation location) { return manager.getResource(location).map(resource -> { - try { - return BlockModel.fromStream(resource.openAsReader()); + try (BufferedReader reader = resource.openAsReader()) { + return BlockModel.fromStream(reader); } catch(IOException e) { ModernFix.LOGGER.error("Couldn't load model", e); return null; @@ -52,8 +55,8 @@ public class ModelManagerMixin { private List loadSingleBlockState(ResourceManager manager, ResourceLocation location) { return manager.getResourceStack(location).stream().map(resource -> { - try { - return new ModelBakery.LoadedJson(resource.sourcePackId(), GsonHelper.parse(resource.openAsReader())); + try (BufferedReader reader = resource.openAsReader()) { + return new ModelBakery.LoadedJson(resource.sourcePackId(), GsonHelper.parse(reader)); } catch(IOException e) { ModernFix.LOGGER.error("Couldn't load blockstate", e); return null;