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

Commit 67fd7fb7 authored by Eric Laurent's avatar Eric Laurent
Browse files

audiopolicy service: increase timeout for create audio patch command

Commit 3fddffee increased the create audio patch config event timeout in
audioflinger but the same modification is also needed in the audio
policy command thread to account for long audio patch creation time for
some Bluetooth devices.

Bug: 399322457
Test: make
Flag: EXEMPT bug fix
Change-Id: Ief237778b475b8063a7e87f9c7dc8243fd4d3e2f
parent 93c796a2
Loading
Loading
Loading
Loading
+7 −1
Original line number Original line Diff line number Diff line
@@ -59,6 +59,10 @@ static const int kDumpLockTimeoutNs = 1 * NANOS_PER_SECOND;


static const nsecs_t kAudioCommandTimeoutNs = seconds(3); // 3 seconds
static const nsecs_t kAudioCommandTimeoutNs = seconds(3); // 3 seconds


// longer timeout for create audio patch to account for specific scenarii
// with Bluetooth devices
static const nsecs_t kPatchAudioCommandTimeoutNs = seconds(4); // 4 seconds

static const String16 sManageAudioPolicyPermission("android.permission.MANAGE_AUDIO_POLICY");
static const String16 sManageAudioPolicyPermission("android.permission.MANAGE_AUDIO_POLICY");


namespace {
namespace {
@@ -2435,7 +2439,9 @@ status_t AudioPolicyService::AudioCommandThread::sendCommand(sp<AudioCommand>& c
    }
    }
    audio_utils::unique_lock ul(command->mMutex);
    audio_utils::unique_lock ul(command->mMutex);
    while (command->mWaitStatus) {
    while (command->mWaitStatus) {
        nsecs_t timeOutNs = kAudioCommandTimeoutNs + milliseconds(delayMs);
        nsecs_t timeOutNs = (command->mCommand == CREATE_AUDIO_PATCH ?
                kPatchAudioCommandTimeoutNs : kAudioCommandTimeoutNs) + milliseconds(delayMs);

        if (command->mCond.wait_for(
        if (command->mCond.wait_for(
                ul, std::chrono::nanoseconds(timeOutNs), getTid()) == std::cv_status::timeout) {
                ul, std::chrono::nanoseconds(timeOutNs), getTid()) == std::cv_status::timeout) {
            command->mStatus = TIMED_OUT;
            command->mStatus = TIMED_OUT;