From 38a1ed2dd3b3895d87300da9b3f11cf322730b7f Mon Sep 17 00:00:00 2001 From: Hiroki KUMAZAKI Date: Thu, 24 Sep 2026 13:09:56 +0900 Subject: [PATCH] android: avoid OpenSL mixer lock recursion --- internal/oboe/oboe_opensles_OutputMixerOpenSLES_android.cpp | 6 ++++-- internal/oboe/oboe_opensles_OutputMixerOpenSLES_android.h | 2 ++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/internal/oboe/oboe_opensles_OutputMixerOpenSLES_android.cpp b/internal/oboe/oboe_opensles_OutputMixerOpenSLES_android.cpp index b4c9e62..b2a6211 100644 --- a/internal/oboe/oboe_opensles_OutputMixerOpenSLES_android.cpp +++ b/internal/oboe/oboe_opensles_OutputMixerOpenSLES_android.cpp @@ -50,15 +50,17 @@ SLresult OutputMixerOpenSL::open() { return result; error: - close(); + closeLocked(); return result; } void OutputMixerOpenSL::close() { std::lock_guard lock(mLock); + closeLocked(); +} +void OutputMixerOpenSL::closeLocked() { if (--mOpenCount == 0) { - // destroy output mix object, and invalidate all associated interfaces if (mOutputMixObject != nullptr) { (*mOutputMixObject)->Destroy(mOutputMixObject); mOutputMixObject = nullptr; diff --git a/internal/oboe/oboe_opensles_OutputMixerOpenSLES_android.h b/internal/oboe/oboe_opensles_OutputMixerOpenSLES_android.h index 409ee6a..1b6c20f 100644 --- a/internal/oboe/oboe_opensles_OutputMixerOpenSLES_android.h +++ b/internal/oboe/oboe_opensles_OutputMixerOpenSLES_android.h @@ -40,6 +40,8 @@ class OutputMixerOpenSL { SLDataSource *audioSource); private: + void closeLocked(); + // Make this a safe Singleton OutputMixerOpenSL()= default; ~OutputMixerOpenSL()= default;