MemoryIntArray: dup in writeToParcel.
Previously, if a MemoryIntArray is written to a parcel from multiple threads, we'll create multiple ParcelFileDescriptors that own the same file descriptor, which fdsan doesn't like. Instead of adopting and then detaching, use ParcelFileDescriptor::fromFd which dups behind the scenes. Bug: http://b/132720476 Test: treehugger Change-Id: Iad4930cc2d8c59a9348fedb0889d24cb566afa62
This commit is contained in:
@@ -175,12 +175,10 @@ public final class MemoryIntArray implements Parcelable, Closeable {
|
||||
|
||||
@Override
|
||||
public void writeToParcel(Parcel parcel, int flags) {
|
||||
ParcelFileDescriptor pfd = ParcelFileDescriptor.adoptFd(mFd);
|
||||
try {
|
||||
// Don't let writing to a parcel to close our fd - plz
|
||||
parcel.writeParcelable(pfd, flags & ~Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
|
||||
} finally {
|
||||
pfd.detachFd();
|
||||
try (ParcelFileDescriptor pfd = ParcelFileDescriptor.fromFd(mFd)) {
|
||||
parcel.writeParcelable(pfd, flags);
|
||||
} catch (IOException ex) {
|
||||
throw new RuntimeException(ex);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user