diff options
author | laszlocsomor <laszlocsomor@google.com> | 2018-07-05 00:17:55 -0700 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-07-05 00:19:21 -0700 |
commit | 59f17d6e0550bf63a0b6ef182e2d63474e058ede (patch) | |
tree | 4cbec855321ead722363687b9983685e2b1bf648 /src/main/java/com/google/devtools/build/lib/bazel | |
parent | b40b7e715307de416b786c1d95f6cf3a6b69c9d3 (diff) |
Bazel server: ensure InputStreams are closed
Use try-with-resources to ensure InputStreams that
we open via FileSystem.InputStream(path) are
closed.
Eagerly closing InputStreams avoids hanging on to
file handles until the garbage collector finalizes
the InputStream, meaning Bazel on Windows (and
other processes) can delete or mutate these files.
Hopefully this avoids intermittent file deletion
errors that sometimes occur on Windows.
See https://github.com/bazelbuild/bazel/issues/5512
RELNOTES: none
PiperOrigin-RevId: 203338148
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/bazel')
2 files changed, 9 insertions, 4 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryFunction.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryFunction.java index ede9cd2620..46c42b606b 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryFunction.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryFunction.java @@ -46,6 +46,7 @@ import com.google.devtools.build.skyframe.SkyKey; import com.google.devtools.build.skyframe.SkyValue; import com.google.devtools.build.skyframe.ValueOrException; import java.io.IOException; +import java.io.InputStream; import java.util.Map; import java.util.Properties; @@ -311,9 +312,10 @@ public class AndroidSdkRepositoryFunction extends AndroidRepositoryFunction { env.getValueOrThrow(releaseFileKey, IOException.class); Properties properties = new Properties(); - properties.load(sourcePropertiesFilePath.getInputStream()); + try (InputStream in = sourcePropertiesFilePath.getInputStream()) { + properties.load(in); + } return properties; - } catch (IOException e) { String error = String.format( "Could not read %s in Android SDK: %s", sourcePropertiesFilePath, e.getMessage()); diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/SdkMavenRepository.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/SdkMavenRepository.java index 1efca1efde..97ebf914f8 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/SdkMavenRepository.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/SdkMavenRepository.java @@ -21,6 +21,7 @@ import com.google.common.collect.Ordering; import com.google.devtools.build.lib.vfs.FileSystemUtils; import com.google.devtools.build.lib.vfs.Path; import java.io.IOException; +import java.io.InputStream; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Collection; @@ -199,8 +200,10 @@ final class SdkMavenRepository { private static final String DEFAULT_PACKAGING = "jar"; static Pom parse(Path path) throws IOException, ParserConfigurationException, SAXException { - Document pomDocument = - DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(path.getInputStream()); + Document pomDocument = null; + try (InputStream in = path.getInputStream()) { + pomDocument = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(in); + } Node packagingNode = pomDocument.getElementsByTagName("packaging").item(0); String packaging = packagingNode == null ? DEFAULT_PACKAGING : packagingNode.getTextContent(); MavenCoordinate coordinate = MavenCoordinate.create( |