summaryrefslogtreecommitdiff
path: root/core/java
diff options
context:
space:
mode:
authorHai Zhang <zhanghai@google.com>2019-08-09 16:37:05 -0700
committerHai Zhang <zhanghai@google.com>2019-08-09 16:38:52 -0700
commitfa3d2016ae389329a04a56041843595ffc11ac07 (patch)
treebff0302275b8e5d7ed3d6b7ad33f13ea865b5518 /core/java
parentc7ccc2cd5e45c695b50844654d1c6bd53c5194a4 (diff)
Avoid leaking FileOutputStream in AtomicDirectory.
Bug: 138866253 Test: presubmit Change-Id: I32adb56d207ec18de0e55664f3ac9eb575a4e3f2
Diffstat (limited to 'core/java')
-rw-r--r--core/java/com/android/internal/os/AtomicDirectory.java20
1 files changed, 12 insertions, 8 deletions
diff --git a/core/java/com/android/internal/os/AtomicDirectory.java b/core/java/com/android/internal/os/AtomicDirectory.java
index f24d12e0c3af..ebcee15587c8 100644
--- a/core/java/com/android/internal/os/AtomicDirectory.java
+++ b/core/java/com/android/internal/os/AtomicDirectory.java
@@ -23,6 +23,8 @@ import android.util.ArrayMap;
import com.android.internal.util.Preconditions;
+import libcore.io.IoUtils;
+
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
@@ -136,10 +138,11 @@ public final class AtomicDirectory {
if (file.isDirectory() || !file.getParentFile().equals(getOrCreateBaseDirectory())) {
throw new IllegalArgumentException("Must be a file in " + getOrCreateBaseDirectory());
}
- final FileOutputStream destination = new FileOutputStream(file);
- if (mOpenFiles.put(file, destination) != null) {
+ if (mOpenFiles.containsKey(file)) {
throw new IllegalArgumentException("Already open file" + file.getCanonicalPath());
}
+ final FileOutputStream destination = new FileOutputStream(file);
+ mOpenFiles.put(file, destination);
return destination;
}
@@ -152,20 +155,21 @@ public final class AtomicDirectory {
*/
public void closeWrite(@NonNull FileOutputStream destination) {
final int indexOfValue = mOpenFiles.indexOfValue(destination);
- if (mOpenFiles.removeAt(indexOfValue) == null) {
+ if (indexOfValue < 0) {
throw new IllegalArgumentException("Unknown file stream " + destination);
}
+ mOpenFiles.removeAt(indexOfValue);
FileUtils.sync(destination);
- try {
- destination.close();
- } catch (IOException ignored) {}
+ IoUtils.closeQuietly(destination);
}
public void failWrite(@NonNull FileOutputStream destination) {
final int indexOfValue = mOpenFiles.indexOfValue(destination);
- if (indexOfValue >= 0) {
- mOpenFiles.removeAt(indexOfValue);
+ if (indexOfValue < 0) {
+ throw new IllegalArgumentException("Unknown file stream " + destination);
}
+ mOpenFiles.removeAt(indexOfValue);
+ IoUtils.closeQuietly(destination);
}
/**