diff options
author | 2020-03-12 17:55:29 -0700 | |
---|---|---|
committer | 2020-03-12 17:59:15 -0700 | |
commit | 61c109cc7cd78a02bb966561a09c35fb29eecde0 (patch) | |
tree | 7403884bf4e6ad47bf78353b2e2dc3d2248e2502 | |
parent | 365caf6f0460744369fd9394a5642d58e4980d72 (diff) |
Visualizer: Fix race condition in setCaptureCallBack
Visualizer:setCaptureCallBack needs to make a local
copy of the CaptureThread pointer before temporarily
releasing mCaptureLock. Otherwise, mCaptureThread
can be released in the meantime from Visualizer::release
Bug: 149375271
Test: use EffectsTest app with "Multithreaded Use"
for the Visualizer test. Repeat releasing the effect
while capture via callback is active.
Change-Id: Iaea62a0e2f7e7a996c1554b9ed89efb67fbdfc11
-rw-r--r-- | media/jni/audioeffect/Visualizer.cpp | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/media/jni/audioeffect/Visualizer.cpp b/media/jni/audioeffect/Visualizer.cpp index 83f3b6ed6217..efeb3352d393 100644 --- a/media/jni/audioeffect/Visualizer.cpp +++ b/media/jni/audioeffect/Visualizer.cpp @@ -120,8 +120,9 @@ status_t Visualizer::setCaptureCallBack(capture_cbk_t cbk, void* user, uint32_t } if (mCaptureThread != 0) { + sp<CaptureThread> t = mCaptureThread; mCaptureLock.unlock(); - mCaptureThread->requestExitAndWait(); + t->requestExitAndWait(); mCaptureLock.lock(); } |