From 2d7554cfea10c1818bb73fd33fc8699c4d93f412 Mon Sep 17 00:00:00 2001 From: John Reck Date: Mon, 20 Sep 2021 14:42:43 -0400 Subject: [PATCH] Revert "Revert "SharedMemory: break Cleaner reference cycle."" This reverts commit b16411f83aee0847fec77d79fb4e98b2e3fa8828. The original change was correct, and the revert re-introduced an FD leak. Test: make Bug: 197500807 Change-Id: Id5118e2b21fa4b7a7198edfe9541f755fd581752 --- core/java/android/os/SharedMemory.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/core/java/android/os/SharedMemory.java b/core/java/android/os/SharedMemory.java index 46eb2ece435cb..20c672a83524a 100644 --- a/core/java/android/os/SharedMemory.java +++ b/core/java/android/os/SharedMemory.java @@ -63,7 +63,7 @@ public final class SharedMemory implements Parcelable, Closeable { mMemoryRegistration = new MemoryRegistration(mSize); mCleaner = Cleaner.create(mFileDescriptor, - new Closer(mFileDescriptor, mMemoryRegistration)); + new Closer(mFileDescriptor.getInt$(), mMemoryRegistration)); } /** @@ -325,10 +325,10 @@ public final class SharedMemory implements Parcelable, Closeable { * Cleaner that closes the FD */ private static final class Closer implements Runnable { - private FileDescriptor mFd; + private int mFd; private MemoryRegistration mMemoryReference; - private Closer(FileDescriptor fd, MemoryRegistration memoryReference) { + private Closer(int fd, MemoryRegistration memoryReference) { mFd = fd; mMemoryReference = memoryReference; } @@ -336,7 +336,9 @@ public final class SharedMemory implements Parcelable, Closeable { @Override public void run() { try { - Os.close(mFd); + FileDescriptor fd = new FileDescriptor(); + fd.setInt$(mFd); + Os.close(fd); } catch (ErrnoException e) { /* swallow error */ } mMemoryReference.release(); mMemoryReference = null;