Skip to content

Commit 5fef7dc

Browse files
Fix dynamic resources ModelManager leak (#231)
The opened BufferedReader was not being closed, and apparently the cleaner/finalize mechanism doesn't exist for it
1 parent ecb3863 commit 5fef7dc

File tree

2 files changed

+13
-9
lines changed

2 files changed

+13
-9
lines changed

fabric/src/main/java/org/embeddedt/modernfix/fabric/mixin/perf/dynamic_resources/ModelManagerMixin.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import org.spongepowered.asm.mixin.injection.At;
1717
import org.spongepowered.asm.mixin.injection.Redirect;
1818

19+
import java.io.BufferedReader;
1920
import java.io.IOException;
2021
import java.util.List;
2122
import java.util.Map;
@@ -43,8 +44,8 @@ private ImmutableList<BlockState> skipCollection(StateDefinition<Block, BlockSta
4344

4445
private BlockModel loadSingleBlockModel(ResourceManager manager, ResourceLocation location) {
4546
return manager.getResource(location).map(resource -> {
46-
try {
47-
return BlockModel.fromStream(resource.openAsReader());
47+
try (BufferedReader reader = resource.openAsReader()) {
48+
return BlockModel.fromStream(reader);
4849
} catch(IOException e) {
4950
ModernFix.LOGGER.error("Couldn't load model", e);
5051
return null;
@@ -54,8 +55,8 @@ private BlockModel loadSingleBlockModel(ResourceManager manager, ResourceLocatio
5455

5556
private List<ModelBakery.LoadedJson> loadSingleBlockState(ResourceManager manager, ResourceLocation location) {
5657
return manager.getResourceStack(location).stream().map(resource -> {
57-
try {
58-
return new ModelBakery.LoadedJson(resource.sourcePackId(), GsonHelper.parse(resource.openAsReader()));
58+
try (BufferedReader reader = resource.openAsReader()) {
59+
return new ModelBakery.LoadedJson(resource.sourcePackId(), GsonHelper.parse(reader));
5960
} catch(IOException e) {
6061
ModernFix.LOGGER.error("Couldn't load blockstate", e);
6162
return null;

forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/dynamic_resources/ModelManagerMixin.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,11 @@
1616
import org.spongepowered.asm.mixin.injection.At;
1717
import org.spongepowered.asm.mixin.injection.Redirect;
1818

19+
import java.io.BufferedReader;
1920
import java.io.IOException;
20-
import java.util.*;
21+
import java.util.List;
22+
import java.util.Map;
23+
import java.util.Objects;
2124
import java.util.concurrent.CompletableFuture;
2225
import java.util.concurrent.Executor;
2326
import java.util.stream.Collectors;
@@ -41,8 +44,8 @@ private ImmutableList<BlockState> skipCollection(StateDefinition<Block, BlockSta
4144

4245
private BlockModel loadSingleBlockModel(ResourceManager manager, ResourceLocation location) {
4346
return manager.getResource(location).map(resource -> {
44-
try {
45-
return BlockModel.fromStream(resource.openAsReader());
47+
try (BufferedReader reader = resource.openAsReader()) {
48+
return BlockModel.fromStream(reader);
4649
} catch(IOException e) {
4750
ModernFix.LOGGER.error("Couldn't load model", e);
4851
return null;
@@ -52,8 +55,8 @@ private BlockModel loadSingleBlockModel(ResourceManager manager, ResourceLocatio
5255

5356
private List<ModelBakery.LoadedJson> loadSingleBlockState(ResourceManager manager, ResourceLocation location) {
5457
return manager.getResourceStack(location).stream().map(resource -> {
55-
try {
56-
return new ModelBakery.LoadedJson(resource.sourcePackId(), GsonHelper.parse(resource.openAsReader()));
58+
try (BufferedReader reader = resource.openAsReader()) {
59+
return new ModelBakery.LoadedJson(resource.sourcePackId(), GsonHelper.parse(reader));
5760
} catch(IOException e) {
5861
ModernFix.LOGGER.error("Couldn't load blockstate", e);
5962
return null;

0 commit comments

Comments
 (0)