From 7b9f5be9149dc84cd16842757ee6fe04f3092dc1 Mon Sep 17 00:00:00 2001 From: ganxiaolin Date: Mon, 6 Jun 2016 11:09:05 +0800 Subject: Delete Visualizer before lpJniStorage It is related to Change: Id17bea8a6ca7132042b9bfefed398a715c139be7 Fix ANR because of bug of Visualizer. If lpJniStorage was delete first, callback_data_lock become a invalid value. At mReceiver.periodicCapture() in CaptureThread, it will lock callback_data_lock. Thus, CaptureThread will wait a invalid memory forever and visualizer wait CaptureThread exiting and causing ANR. Signed-off-by: ganxiaolin --- media/jni/audioeffect/android_media_Visualizer.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/media/jni/audioeffect/android_media_Visualizer.cpp b/media/jni/audioeffect/android_media_Visualizer.cpp index ce886eeb5f93..4632f4a9e5b6 100644 --- a/media/jni/audioeffect/android_media_Visualizer.cpp +++ b/media/jni/audioeffect/android_media_Visualizer.cpp @@ -435,9 +435,12 @@ setup_failure: // ---------------------------------------------------------------------------- static void android_media_visualizer_native_release(JNIEnv *env, jobject thiz) { - sp lpVisualizer = setVisualizer(env, thiz, 0); - if (lpVisualizer == 0) { - return; + // ensure that lpVisualizer is deleted before lpJniStorage + { + sp lpVisualizer = setVisualizer(env, thiz, 0); + if (lpVisualizer == 0) { + return; + } } // delete the JNI data -- cgit v1.2.3-59-g8ed1b