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

Commit 942bdc0a authored by Phil Burk's avatar Phil Burk
Browse files

aaudio: plug some resource leaks



Close some file descriptors for shared memory that were not getting closed.

Bug: 37947848
Test: see bug for test procedure
Change-Id: Icdc13188b0a49d08b67babff0852c3a4eda8fd2b
Signed-off-by: default avatarPhil Burk <philburk@google.com>
parent 441f2ccb
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -23,7 +23,7 @@
#include "SineGenerator.h"

#define SAMPLE_RATE           48000
#define NUM_SECONDS           15
#define NUM_SECONDS           5
#define NANOS_PER_MICROSECOND ((int64_t)1000)
#define NANOS_PER_MILLISECOND (NANOS_PER_MICROSECOND * 1000)
#define NANOS_PER_SECOND      (NANOS_PER_MILLISECOND * 1000)
+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;
Loading