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);
|
mMemoryRegistration = new MemoryRegistration(mSize);
|
||||||
mCleaner = Cleaner.create(mFileDescriptor,
|
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
|
* Cleaner that closes the FD
|
||||||
*/
|
*/
|
||||||
private static final class Closer implements Runnable {
|
private static final class Closer implements Runnable {
|
||||||
private FileDescriptor mFd;
|
private int mFd;
|
||||||
private MemoryRegistration mMemoryReference;
|
private MemoryRegistration mMemoryReference;
|
||||||
|
|
||||||
private Closer(FileDescriptor fd, MemoryRegistration memoryReference) {
|
private Closer(int fd, MemoryRegistration memoryReference) {
|
||||||
mFd = fd;
|
mFd = fd;
|
||||||
mMemoryReference = memoryReference;
|
mMemoryReference = memoryReference;
|
||||||
}
|
}
|
||||||
@@ -301,7 +301,9 @@ public final class SharedMemory implements Parcelable, Closeable {
|
|||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
try {
|
try {
|
||||||
Os.close(mFd);
|
FileDescriptor fd = new FileDescriptor();
|
||||||
|
fd.setInt$(mFd);
|
||||||
|
Os.close(fd);
|
||||||
} catch (ErrnoException e) { /* swallow error */ }
|
} catch (ErrnoException e) { /* swallow error */ }
|
||||||
mMemoryReference.release();
|
mMemoryReference.release();
|
||||||
mMemoryReference = null;
|
mMemoryReference = null;
|
||||||
|
|||||||
Reference in New Issue
Block a user