From 7f20b0d148293ac7a1787ba42695f544dd2dbb0c Mon Sep 17 00:00:00 2001 From: John Reck Date: Fri, 26 Jul 2019 12:19:56 -0700 Subject: Fix regression in PFD#fromData Don't rely on the GC to clean up FD resources when they can just be cleaned up immediately. We know the MemoryFile isn't going to be used any further, so just close it. Bug: 138323667 Test: none Change-Id: Ic82006c9cb48f580aaad942c4679e774186382c9 Merged-In: Ic82006c9cb48f580aaad942c4679e774186382c9 (cherry-picked from commit d201b44032cdd86177406051dcc07f4625ed3b69) --- core/java/android/os/ParcelFileDescriptor.java | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/core/java/android/os/ParcelFileDescriptor.java b/core/java/android/os/ParcelFileDescriptor.java index 36ffd7a738c8..993e13da539a 100644 --- a/core/java/android/os/ParcelFileDescriptor.java +++ b/core/java/android/os/ParcelFileDescriptor.java @@ -584,12 +584,16 @@ public class ParcelFileDescriptor implements Parcelable, Closeable { public static ParcelFileDescriptor fromData(byte[] data, String name) throws IOException { if (data == null) return null; MemoryFile file = new MemoryFile(name, data.length); - if (data.length > 0) { - file.writeBytes(data, 0, 0, data.length); + try { + if (data.length > 0) { + file.writeBytes(data, 0, 0, data.length); + } + file.deactivate(); + FileDescriptor fd = file.getFileDescriptor(); + return fd != null ? ParcelFileDescriptor.dup(fd) : null; + } finally { + file.close(); } - file.deactivate(); - FileDescriptor fd = file.getFileDescriptor(); - return fd != null ? ParcelFileDescriptor.dup(fd) : null; } /** -- cgit v1.2.3-59-g8ed1b