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

Commit 53ae3838 authored by Gareth Fenn's avatar Gareth Fenn Committed by Hongguang
Browse files

Fix TunerHAL deadlock issue



testRecordOutput() holds msgLock preventing record thread from progressing
  Calls to stopRecordThread() block forever
  Therefore remove the calls to stopRecordThread()
Fix mDataOutputBuffer copy size
Fix getCiCamInfo config

Bug: 201556155
Test: VtsHalTvTunerV1_{0,1}TargetTest on BCM device
Signed-off-by: default avatarPierre Couillaud <pierre@broadcom.com>
Change-Id: I7faeed032281b58fdc3361f297cb541491c4049d
parent 282fb370
Loading
Loading
Loading
Loading
+3 −4
Original line number Diff line number Diff line
@@ -124,11 +124,9 @@ void DvrCallback::testRecordOutput() {
    while (mDataOutputBuffer.empty()) {
        if (-ETIMEDOUT == mMsgCondition.waitRelative(mMsgLock, WAIT_TIMEOUT)) {
            EXPECT_TRUE(false) << "record output matching pid does not output within timeout";
            stopRecordThread();
            return;
        }
    }
    stopRecordThread();
    ALOGW("[vts] record pass and stop");
}

@@ -193,9 +191,10 @@ void DvrCallback::recordThreadLoop(RecordSettings* /*recordSettings*/, bool* kee
bool DvrCallback::readRecordFMQ() {
    android::Mutex::Autolock autoLock(mMsgLock);
    bool result = false;
    int readSize = mRecordMQ->availableToRead();
    mDataOutputBuffer.clear();
    mDataOutputBuffer.resize(mRecordMQ->availableToRead());
    result = mRecordMQ->read(mDataOutputBuffer.data(), mRecordMQ->availableToRead());
    mDataOutputBuffer.resize(readSize);
    result = mRecordMQ->read(mDataOutputBuffer.data(), readSize);
    EXPECT_TRUE(result) << "can't read from Record MQ";
    mMsgCondition.signal();
    return result;
+0 −2
Original line number Diff line number Diff line
@@ -123,11 +123,9 @@ void DvrCallback::testRecordOutput() {
    while (mDataOutputBuffer.empty()) {
        if (-ETIMEDOUT == mMsgCondition.waitRelative(mMsgLock, WAIT_TIMEOUT)) {
            EXPECT_TRUE(false) << "record output matching pid does not output within timeout";
            stopRecordThread();
            return;
        }
    }
    stopRecordThread();
    ALOGW("[vts] record pass and stop");
}

+1 −0
Original line number Diff line number Diff line
@@ -998,6 +998,7 @@ struct TunerTestingConfigAidlReader1_0 {
        if (!feConfig.hasConnectToCicamId()) {
            canConnectToCiCam = false;
            ciCamId = -1;
            return;
        }
        canConnectToCiCam = true;
        ciCamId = static_cast<int32_t>(feConfig.getConnectToCicamId());
+1 −0
Original line number Diff line number Diff line
@@ -145,6 +145,7 @@ struct TunerTestingConfigReader1_1 {
        if (!feConfig.hasConnectToCicamId()) {
            canConnectToCiCam = false;
            ciCamId = -1;
            return;
        }
        canConnectToCiCam = true;
        ciCamId = static_cast<uint32_t>(feConfig.getConnectToCicamId());