summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Mikhail Naganov <mnaganov@google.com> 2020-03-12 17:55:29 -0700
committer Mikhail Naganov <mnaganov@google.com> 2020-03-12 17:59:15 -0700
commit61c109cc7cd78a02bb966561a09c35fb29eecde0 (patch)
tree7403884bf4e6ad47bf78353b2e2dc3d2248e2502
parent365caf6f0460744369fd9394a5642d58e4980d72 (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.cpp3
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();
}