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

Commit 21be5e5c authored by Eric Laurent's avatar Eric Laurent Committed by Automerger Merge Worker
Browse files

PatchPanel: fix deadlock when releasing a patch am: 34e55a46

parents 30770f1a 34e55a46
Loading
Loading
Loading
Loading
+9 −1
Original line number Diff line number Diff line
@@ -735,6 +735,10 @@ String8 AudioFlinger::PatchPanel::Patch::dump(audio_patch_handle_t myHandle) con

/* Disconnect a patch */
status_t AudioFlinger::PatchPanel::releaseAudioPatch(audio_patch_handle_t handle)
 //unlocks AudioFlinger::mLock when calling ThreadBase::sendReleaseAudioPatchConfigEvent
 //to avoid deadlocks if the thread loop needs to acquire AudioFlinger::mLock
 //before processing the release patch request.
 NO_THREAD_SAFETY_ANALYSIS
 {
    ALOGV("%s handle %d", __func__, handle);
    status_t status = NO_ERROR;
@@ -772,7 +776,9 @@ status_t AudioFlinger::PatchPanel::releaseAudioPatch(audio_patch_handle_t handle
                        break;
                    }
                }
                mAudioFlinger.unlock();
                status = thread->sendReleaseAudioPatchConfigEvent(removedPatch.mHalHandle);
                mAudioFlinger.lock();
            } else {
                status = hwDevice->releaseAudioPatch(removedPatch.mHalHandle);
            }
@@ -793,7 +799,9 @@ status_t AudioFlinger::PatchPanel::releaseAudioPatch(audio_patch_handle_t handle
                    break;
                }
            }
            mAudioFlinger.unlock();
            status = thread->sendReleaseAudioPatchConfigEvent(removedPatch.mHalHandle);
            mAudioFlinger.lock();
        } break;
        default:
            status = BAD_VALUE;