From f0d7a1165de8eda9e2034bfcdd889319ffee7d48 Mon Sep 17 00:00:00 2001 From: Jonathan Coates Date: Wed, 5 May 2021 21:26:17 +0100 Subject: [PATCH] Don't close file handles from ResourceMounts Unlike short handles, we don't read these immediately, and so we can't close it right away. Otherwise the file is considered empty! Fixes SquidDev-CC/treasure-programs#1 --- .../core/filesystem/ResourceMount.java | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/src/main/java/dan200/computercraft/core/filesystem/ResourceMount.java b/src/main/java/dan200/computercraft/core/filesystem/ResourceMount.java index e767525b6..5e9e4a067 100644 --- a/src/main/java/dan200/computercraft/core/filesystem/ResourceMount.java +++ b/src/main/java/dan200/computercraft/core/filesystem/ResourceMount.java @@ -31,7 +31,7 @@ import com.google.common.io.ByteStreams; import dan200.computercraft.ComputerCraft; import dan200.computercraft.api.filesystem.IMount; import dan200.computercraft.core.apis.handles.ArrayByteChannel; - +import dan200.computercraft.shared.util.IoUtil; import net.minecraft.resource.ReloadableResourceManager; import net.minecraft.resource.Resource; import net.minecraft.resource.ResourceManager; @@ -186,13 +186,19 @@ public final class ResourceMount implements IMount { return new ArrayByteChannel(contents); } - try (InputStream stream = this.manager.getResource(file.identifier) - .getInputStream()) { - if (stream.available() > MAX_CACHED_SIZE) { - return Channels.newChannel(stream); - } + try + { + InputStream stream = manager.getResource( file.identifier ).getInputStream(); + if( stream.available() > MAX_CACHED_SIZE ) return Channels.newChannel( stream ); - contents = ByteStreams.toByteArray(stream); + try + { + contents = ByteStreams.toByteArray( stream ); + } + finally + { + IoUtil.closeQuietly( stream ); + } CONTENTS_CACHE.put(file, contents); return new ArrayByteChannel(contents); } catch (FileNotFoundException ignored) {