summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Josh Gao <jmgao@google.com> 2019-07-31 21:46:23 -0700
committer android-build-merger <android-build-merger@google.com> 2019-07-31 21:46:23 -0700
commitcdca6b559c6e4388f85cc32ef4dcaf8df0c3d618 (patch)
tree738ede8fac6da1fd79ac74a7356b14090e1ae94e
parentf6b04a5e3b879a30365b238efa4ce1aa6f0c50d6 (diff)
parenta0c949d5de1349899cb44e3bb6c78a1660f317e0 (diff)
Merge changes I9350ec13,I809d9191,I235f727d,I1930f3ba
am: a0c949d5de Change-Id: I1633d9eae6f162e338990766e62e3aa3873df606
-rw-r--r--core/java/android/os/SharedMemory.java19
-rw-r--r--services/core/java/com/android/server/GraphicsStatsService.java2
2 files changed, 13 insertions, 8 deletions
diff --git a/core/java/android/os/SharedMemory.java b/core/java/android/os/SharedMemory.java
index 0540e3611b52..7df4b5d8f63b 100644
--- a/core/java/android/os/SharedMemory.java
+++ b/core/java/android/os/SharedMemory.java
@@ -25,6 +25,8 @@ import android.system.OsConstants;
import dalvik.system.VMRuntime;
+import libcore.io.IoUtils;
+
import java.io.Closeable;
import java.io.FileDescriptor;
import java.nio.ByteBuffer;
@@ -293,21 +295,24 @@ public final class SharedMemory implements Parcelable, Closeable {
* Cleaner that closes the FD
*/
private static final class Closer implements Runnable {
- private int mFd;
+ // This is a copy of the FileDescriptor we're attached to, in order to avoid a reference
+ // cycle.
+ private FileDescriptor mFd;
private MemoryRegistration mMemoryReference;
private Closer(int fd, MemoryRegistration memoryReference) {
- mFd = fd;
+ mFd = new FileDescriptor();
+ mFd.setInt$(fd);
+ IoUtils.setFdOwner(mFd, this);
+
mMemoryReference = memoryReference;
}
@Override
public void run() {
- try {
- FileDescriptor fd = new FileDescriptor();
- fd.setInt$(mFd);
- Os.close(fd);
- } catch (ErrnoException e) { /* swallow error */ }
+ IoUtils.closeQuietly(mFd);
+ mFd = null;
+
mMemoryReference.release();
mMemoryReference = null;
}
diff --git a/services/core/java/com/android/server/GraphicsStatsService.java b/services/core/java/com/android/server/GraphicsStatsService.java
index 4639d7586f83..70569db5e2d3 100644
--- a/services/core/java/com/android/server/GraphicsStatsService.java
+++ b/services/core/java/com/android/server/GraphicsStatsService.java
@@ -191,7 +191,7 @@ public class GraphicsStatsService extends IGraphicsStats.Stub {
if (!file.getFileDescriptor().valid()) {
throw new IllegalStateException("Invalid file descriptor");
}
- return new ParcelFileDescriptor(file.getFileDescriptor());
+ return ParcelFileDescriptor.dup(file.getFileDescriptor());
} catch (IOException ex) {
throw new IllegalStateException("Failed to get PFD from memory file", ex);
}