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

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

Merge "aaudio: plug some resource leaks" into oc-dev

parents ebb1475d 942bdc0a
Loading
Loading
Loading
Loading
+13 −4
Original line number Diff line number Diff line
@@ -50,7 +50,8 @@ status_t SharedMemoryParcelable::writeToParcel(Parcel* parcel) const {
    if (status != NO_ERROR) return status;
    if (mSizeInBytes > 0) {
        status = parcel->writeDupFileDescriptor(mFd);
        ALOGE_IF(status != NO_ERROR, "SharedMemoryParcelable writeDupFileDescriptor failed : %d", status);
        ALOGE_IF(status != NO_ERROR, "SharedMemoryParcelable writeDupFileDescriptor failed : %d",
                 status);
    }
    return status;
}
@@ -61,11 +62,13 @@ status_t SharedMemoryParcelable::readFromParcel(const Parcel* parcel) {
        return status;
    }
    if (mSizeInBytes > 0) {
        int originalFD = parcel->readFileDescriptor();
        mFd = fcntl(originalFD, F_DUPFD_CLOEXEC, 0);
        mOriginalFd = parcel->readFileDescriptor();
        ALOGV("SharedMemoryParcelable::readFromParcel() LEAK? mOriginalFd = %d\n", mOriginalFd);
        mFd = fcntl(mOriginalFd, F_DUPFD_CLOEXEC, 0);
        ALOGV("SharedMemoryParcelable::readFromParcel() LEAK? mFd = %d\n", mFd);
        if (mFd == -1) {
            status = -errno;
            ALOGE("SharedMemoryParcelable readFileDescriptor fcntl() failed : %d", status);
            ALOGE("SharedMemoryParcelable readFromParcel fcntl() failed : %d", status);
        }
    }
    return status;
@@ -81,9 +84,15 @@ aaudio_result_t SharedMemoryParcelable::close() {
        mResolvedAddress = MMAP_UNRESOLVED_ADDRESS;
    }
    if (mFd != -1) {
        ALOGV("SharedMemoryParcelable::close() LEAK? mFd = %d\n", mFd);
        ::close(mFd);
        mFd = -1;
    }
    if (mOriginalFd != -1) {
        ALOGV("SharedMemoryParcelable::close() LEAK? mOriginalFd = %d\n", mOriginalFd);
        ::close(mOriginalFd);
        mOriginalFd = -1;
    }
    return AAUDIO_OK;
}

+3 −2
Original line number Diff line number Diff line
@@ -68,6 +68,7 @@ protected:
#define MMAP_UNRESOLVED_ADDRESS    reinterpret_cast<uint8_t*>(MAP_FAILED)

    int      mFd = -1;
    int      mOriginalFd = -1;
    int32_t  mSizeInBytes = 0;
    uint8_t *mResolvedAddress = MMAP_UNRESOLVED_ADDRESS;
};
+1 −0
Original line number Diff line number Diff line
@@ -59,6 +59,7 @@ aaudio_result_t AAudioServiceStreamBase::close() {
    std::lock_guard<std::mutex> lock(mLockUpMessageQueue);
    delete mUpMessageQueue;
    mUpMessageQueue = nullptr;

    return AAUDIO_OK;
}

+0 −3
Original line number Diff line number Diff line
@@ -133,9 +133,6 @@ protected:
    // This is used by one thread to tell another thread to exit. So it must be atomic.
    std::atomic<bool>   mThreadEnabled;


    int                mAudioDataFileDescriptor = -1;

    aaudio_audio_format_t mAudioFormat = AAUDIO_FORMAT_UNSPECIFIED;
    int32_t            mFramesPerBurst = 0;
    int32_t            mSamplesPerFrame = AAUDIO_UNSPECIFIED;
+9 −0
Original line number Diff line number Diff line
@@ -60,6 +60,13 @@ aaudio_result_t AAudioServiceStreamMMAP::close() {
    // FIXME Make closing synchronous.
    AudioClock::sleepForNanos(100 * AAUDIO_NANOS_PER_MILLISECOND);

    if (mAudioDataFileDescriptor != -1) {
        ALOGV("AAudioServiceStreamMMAP: LEAK? close(mAudioDataFileDescriptor = %d)\n",
              mAudioDataFileDescriptor);
        ::close(mAudioDataFileDescriptor);
        mAudioDataFileDescriptor = -1;
    }

    return AAudioServiceStreamBase::close();
}

@@ -164,6 +171,8 @@ aaudio_result_t AAudioServiceStreamMMAP::open(const aaudio::AAudioStreamRequest
                           : audio_channel_count_from_in_mask(config.channel_mask);

    mAudioDataFileDescriptor = mMmapBufferinfo.shared_memory_fd;
    ALOGV("AAudioServiceStreamMMAP::open LEAK? mAudioDataFileDescriptor = %d\n",
          mAudioDataFileDescriptor);
    mFramesPerBurst = mMmapBufferinfo.burst_size_frames;
    mCapacityInFrames = mMmapBufferinfo.buffer_size_frames;
    mAudioFormat = AAudioConvert_androidToAAudioDataFormat(config.format);
Loading