Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 536cf5e0 authored by Josh Gao's avatar Josh Gao
Browse files

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
parent 28706f02
Loading
Loading
Loading
Loading
+4 −6
Original line number Diff line number Diff line
@@ -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);
        }
    }