From af16d0b30e89f31b7617424c8706553ff571d08d Mon Sep 17 00:00:00 2001 From: Mike Lockwood Date: Sun, 10 Jul 2011 14:22:31 -0400 Subject: Remove unnecessary locking from MediaScanner JNI code There is nothing in this file that requires a global lock. Furthermore, the lock can cause timeouts in native_finalize if one instance is being garbage collected while another is busy in processDirectory Bug: 5002520 Change-Id: I8717f8edeb932200d9f76b3d98915cfbe18b6ec6 Signed-off-by: Mike Lockwood --- media/java/android/media/MediaScanner.java | 2 ++ media/jni/android_media_MediaScanner.cpp | 7 ------- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/media/java/android/media/MediaScanner.java b/media/java/android/media/MediaScanner.java index c55338a9bff8..799bd00e98b3 100644 --- a/media/java/android/media/MediaScanner.java +++ b/media/java/android/media/MediaScanner.java @@ -101,6 +101,8 @@ import java.util.Iterator; * Java MyMediaScanner handleStringTag. * Once MediaScanner processFile returns, an entry is inserted in to the database. * + * The MediaScanner class is not thread-safe, so it should only be used in a single threaded manner. + * * {@hide} */ public class MediaScanner diff --git a/media/jni/android_media_MediaScanner.cpp b/media/jni/android_media_MediaScanner.cpp index 915179915b1e..d0d2d1e6f92f 100644 --- a/media/jni/android_media_MediaScanner.cpp +++ b/media/jni/android_media_MediaScanner.cpp @@ -45,7 +45,6 @@ struct fields_t { jfieldID context; }; static fields_t fields; -static Mutex sLock; class MyMediaScannerClient : public MediaScannerClient { @@ -159,13 +158,11 @@ static bool ExceptionCheck(void* env) return ((JNIEnv *)env)->ExceptionCheck(); } -// Call this method with sLock hold static MediaScanner *getNativeScanner_l(JNIEnv* env, jobject thiz) { return (MediaScanner *) env->GetIntField(thiz, fields.context); } -// Call this method with sLock hold static void setNativeScanner_l(JNIEnv* env, jobject thiz, MediaScanner *s) { env->SetIntField(thiz, fields.context, (int)s); @@ -176,7 +173,6 @@ android_media_MediaScanner_processDirectory( JNIEnv *env, jobject thiz, jstring path, jobject client) { LOGV("processDirectory"); - Mutex::Autolock l(sLock); MediaScanner *mp = getNativeScanner_l(env, thiz); if (mp == NULL) { jniThrowException(env, kRunTimeException, "No scanner available"); @@ -243,7 +239,6 @@ android_media_MediaScanner_setLocale( JNIEnv *env, jobject thiz, jstring locale) { LOGV("setLocale"); - Mutex::Autolock l(sLock); MediaScanner *mp = getNativeScanner_l(env, thiz); if (mp == NULL) { jniThrowException(env, kRunTimeException, "No scanner available"); @@ -268,7 +263,6 @@ android_media_MediaScanner_extractAlbumArt( JNIEnv *env, jobject thiz, jobject fileDescriptor) { LOGV("extractAlbumArt"); - Mutex::Autolock l(sLock); MediaScanner *mp = getNativeScanner_l(env, thiz); if (mp == NULL) { jniThrowException(env, kRunTimeException, "No scanner available"); @@ -339,7 +333,6 @@ static void android_media_MediaScanner_native_finalize(JNIEnv *env, jobject thiz) { LOGV("native_finalize"); - Mutex::Autolock l(sLock); MediaScanner *mp = getNativeScanner_l(env, thiz); if (mp == 0) { return; -- cgit v1.2.3-59-g8ed1b