From 81f66d83075ad1008a7dc25ea0c4ea43d950a44d Mon Sep 17 00:00:00 2001 From: Aniket Kumar Lata Date: Wed, 3 Jul 2019 10:44:47 -0700 Subject: [PATCH] DO NOT MERGE: Visualizer: Fix deadlock on close Visualizer gets stuck in mCaptureThread::requestExitAndWait due to a deadlock between mCaptureThread::mRunning and mCaptureLock. Temporarily release mCaptureLock upon mCaptureThread::requestExitAndWait. Test: Clarity -> Response, rapidly toggle visualizer enable, disable Bug: 135326776 authored-by: Weiyin Jiang Change-Id: If32431c4d7b271b7ea61168cb1a5a42f3a1cd66e --- media/libmedia/Visualizer.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/media/libmedia/Visualizer.cpp b/media/libmedia/Visualizer.cpp index cb8d3750b7..2bf08020b3 100644 --- a/media/libmedia/Visualizer.cpp +++ b/media/libmedia/Visualizer.cpp @@ -77,10 +77,13 @@ status_t Visualizer::setEnabled(bool enabled) if (t != 0) { if (enabled) { if (t->exitPending()) { + mCaptureLock.unlock(); if (t->requestExitAndWait() == WOULD_BLOCK) { + mCaptureLock.lock(); ALOGE("Visualizer::enable() called from thread"); return INVALID_OPERATION; } + mCaptureLock.lock(); } } t->mLock.lock();