summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/jni/com_android_server_location_FlpHardwareProvider.cpp28
1 files changed, 16 insertions, 12 deletions
diff --git a/services/core/jni/com_android_server_location_FlpHardwareProvider.cpp b/services/core/jni/com_android_server_location_FlpHardwareProvider.cpp
index 8ea9bfc04662..06d2031e4a4a 100644
--- a/services/core/jni/com_android_server_location_FlpHardwareProvider.cpp
+++ b/services/core/jni/com_android_server_location_FlpHardwareProvider.cpp
@@ -78,7 +78,7 @@ static inline void ThrowOnError(
env->ThrowNew(exceptionClass, methodName);
}
-static bool IsValidCallbackThread() {
+static bool IsValidCallbackThreadEnvOnly() {
JNIEnv* env = AndroidRuntime::getJNIEnv();
if(sCallbackEnv == NULL || sCallbackEnv != env) {
@@ -89,6 +89,20 @@ static bool IsValidCallbackThread() {
return true;
}
+static bool IsValidCallbackThread() {
+ // sCallbacksObject is created when FlpHardwareProvider on Java side is
+ // initialized. Sometimes the hardware may call a function before the Java
+ // side is ready. In order to prevent a system crash, check whether
+ // sCallbacksObj has been created. If not, simply ignore this event from
+ // hardware.
+ if (sCallbacksObj == NULL) {
+ ALOGE("Attempt to use FlpHardwareProvider blocked, because it hasn't been initialized.");
+ return false;
+ }
+
+ return IsValidCallbackThreadEnvOnly();
+}
+
static void BatchingCapabilitiesCallback(int32_t capabilities) {
if(!IsValidCallbackThread()) {
return;
@@ -154,7 +168,7 @@ static int SetThreadEvent(ThreadEvent event) {
}
case DISASSOCIATE_JVM:
{
- if (!IsValidCallbackThread()) {
+ if (!IsValidCallbackThreadEnvOnly()) {
ALOGE(
"Attempted to dissasociate an unnownk callback thread : '%s'.",
__FUNCTION__
@@ -661,16 +675,6 @@ static void GeofenceMonitorStatusCallback(
TranslateToObject(lastLocation, locationObject);
}
- // sCallbacksObject is created when FlpHardwareProvider on Java side is
- // initialized. Sometimes the hardware may call this function before the Java
- // side is ready. In order to prevent the system crash, check whether
- // sCallbacksObj has been created. If not, simply ignore this event from
- // hardware.
- if (sCallbacksObj == NULL) {
- ALOGE("FlpHardwareProvider hasn't been initialized.");
- return;
- }
-
sCallbackEnv->CallVoidMethod(
sCallbacksObj,
sOnGeofenceMonitorStatus,