From 8b7ad976bfa88d54c00c02a4b2b582d56bcaa699 Mon Sep 17 00:00:00 2001 From: Lifu Tang Date: Wed, 20 Apr 2016 12:14:07 -0700 Subject: [PATCH] Added defensive code to prevent system crash Bug: 26940611 Change-Id: I8226d1acb42ccc7d2cd910e30b47c7c63c9f490b --- ...com_android_server_location_FlpHardwareProvider.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/services/core/jni/com_android_server_location_FlpHardwareProvider.cpp b/services/core/jni/com_android_server_location_FlpHardwareProvider.cpp index 774577d43d69d..8ea9bfc04662e 100644 --- a/services/core/jni/com_android_server_location_FlpHardwareProvider.cpp +++ b/services/core/jni/com_android_server_location_FlpHardwareProvider.cpp @@ -661,6 +661,16 @@ 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,