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

Commit f5095b33 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Fix double fd close in SharedMemoryParcelable." into oc-dr1-dev

parents a7a28931 1d665bc4
Loading
Loading
Loading
Loading
+8 −9
Original line number Original line Diff line number Diff line
@@ -64,9 +64,9 @@ status_t SharedMemoryParcelable::readFromParcel(const Parcel* parcel) {
    if (mSizeInBytes > 0) {
    if (mSizeInBytes > 0) {
        // Keep the original FD until you are done with the mFd.
        // Keep the original FD until you are done with the mFd.
        // If you close it in here then it will prevent mFd from working.
        // If you close it in here then it will prevent mFd from working.
        mOriginalFd = parcel->readFileDescriptor();
        int originalFd = parcel->readFileDescriptor();
        ALOGV("SharedMemoryParcelable::readFromParcel() LEAK? mOriginalFd = %d\n", mOriginalFd);
        ALOGV("SharedMemoryParcelable::readFromParcel() LEAK? originalFd = %d\n", originalFd);
        mFd = fcntl(mOriginalFd, F_DUPFD_CLOEXEC, 0);
        mFd = fcntl(originalFd, F_DUPFD_CLOEXEC, 0);
        ALOGV("SharedMemoryParcelable::readFromParcel() LEAK? mFd = %d\n", mFd);
        ALOGV("SharedMemoryParcelable::readFromParcel() LEAK? mFd = %d\n", mFd);
        if (mFd == -1) {
        if (mFd == -1) {
            status = -errno;
            status = -errno;
@@ -87,13 +87,12 @@ aaudio_result_t SharedMemoryParcelable::close() {
    }
    }
    if (mFd != -1) {
    if (mFd != -1) {
        ALOGV("SharedMemoryParcelable::close() LEAK? mFd = %d\n", mFd);
        ALOGV("SharedMemoryParcelable::close() LEAK? mFd = %d\n", mFd);
        ::close(mFd);
        if(::close(mFd) < 0) {
        mFd = -1;
            int err = errno;
            ALOGE("SharedMemoryParcelable close failed for fd = %d, errno = %d (%s)",
                  mFd, err, strerror(err));
        }
        }
    if (mOriginalFd != -1) {
        mFd = -1;
        ALOGV("SharedMemoryParcelable::close() LEAK? mOriginalFd = %d\n", mOriginalFd);
        ::close(mOriginalFd);
        mOriginalFd = -1;
    }
    }
    return AAUDIO_OK;
    return AAUDIO_OK;
}
}
+0 −1
Original line number Original line Diff line number Diff line
@@ -68,7 +68,6 @@ protected:
#define MMAP_UNRESOLVED_ADDRESS    reinterpret_cast<uint8_t*>(MAP_FAILED)
#define MMAP_UNRESOLVED_ADDRESS    reinterpret_cast<uint8_t*>(MAP_FAILED)


    int      mFd = -1;
    int      mFd = -1;
    int      mOriginalFd = -1;
    int32_t  mSizeInBytes = 0;
    int32_t  mSizeInBytes = 0;
    uint8_t *mResolvedAddress = MMAP_UNRESOLVED_ADDRESS;
    uint8_t *mResolvedAddress = MMAP_UNRESOLVED_ADDRESS;
};
};