Merge "SharedMemory: break Cleaner reference cycle."
This commit is contained in:
@@ -62,7 +62,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));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -290,10 +290,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;
|
||||
}
|
||||
@@ -301,7 +301,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;
|
||||
|
||||
Reference in New Issue
Block a user