summaryrefslogtreecommitdiff
path: root/android
diff options
context:
space:
mode:
authorMike Cailean <mcailean@codeaurora.org>2020-06-25 17:47:59 -0700
committerMike Cailean <mcailean@codeaurora.org>2020-06-26 17:18:01 -0700
commitb26e5ea22b00e8c4d7f5c82af0c8979d885738f9 (patch)
tree061b369d54f881fba32b719f0a561923cba5a51f /android
parent516d8d128ae3d1e3e9786a14731a18b924c4abca (diff)
The callbacks could be stale in GnssMeasurement
CRs-fixed: 2719986 Change-Id: Ibc4700342bf9cbdefd222ac4a65b42323af7ae80
Diffstat (limited to 'android')
-rw-r--r--android/2.0/GnssMeasurement.cpp22
-rw-r--r--android/2.0/GnssMeasurement.h1
-rw-r--r--android/2.0/location_api/MeasurementAPIClient.cpp10
-rw-r--r--android/2.0/location_api/MeasurementAPIClient.h2
-rw-r--r--android/2.1/GnssMeasurement.cpp24
-rw-r--r--[-rwxr-xr-x]android/2.1/GnssMeasurement.h1
-rw-r--r--android/2.1/location_api/MeasurementAPIClient.cpp12
-rw-r--r--[-rwxr-xr-x]android/2.1/location_api/MeasurementAPIClient.h2
8 files changed, 60 insertions, 14 deletions
diff --git a/android/2.0/GnssMeasurement.cpp b/android/2.0/GnssMeasurement.cpp
index 721a48c..f09cc16 100644
--- a/android/2.0/GnssMeasurement.cpp
+++ b/android/2.0/GnssMeasurement.cpp
@@ -71,18 +71,15 @@ Return<GnssMeasurement::GnssMeasurementStatus> GnssMeasurement::setCallback(
return ret;
}
+ clearInterfaces();
+
mGnssMeasurementCbIface = callback;
mGnssMeasurementCbIface->linkToDeath(mGnssMeasurementDeathRecipient, 0);
return mApi->measurementSetCallback(callback);
}
-Return<void> GnssMeasurement::close() {
- if (mApi == nullptr) {
- LOC_LOGE("%s]: mApi is nullptr", __FUNCTION__);
- return Void();
- }
-
+void GnssMeasurement::clearInterfaces() {
if (mGnssMeasurementCbIface != nullptr) {
mGnssMeasurementCbIface->unlinkToDeath(mGnssMeasurementDeathRecipient);
mGnssMeasurementCbIface = nullptr;
@@ -95,6 +92,15 @@ Return<void> GnssMeasurement::close() {
mGnssMeasurementCbIface_2_0->unlinkToDeath(mGnssMeasurementDeathRecipient);
mGnssMeasurementCbIface_2_0 = nullptr;
}
+}
+
+Return<void> GnssMeasurement::close() {
+ if (mApi == nullptr) {
+ LOC_LOGE("%s]: mApi is nullptr", __FUNCTION__);
+ return Void();
+ }
+
+ clearInterfaces();
mApi->measurementClose();
return Void();
@@ -120,6 +126,8 @@ Return<GnssMeasurement::GnssMeasurementStatus> GnssMeasurement::setCallback_1_1(
return ret;
}
+ clearInterfaces();
+
mGnssMeasurementCbIface_1_1 = callback;
mGnssMeasurementCbIface_1_1->linkToDeath(mGnssMeasurementDeathRecipient, 0);
@@ -149,6 +157,8 @@ Return<V1_0::IGnssMeasurement::GnssMeasurementStatus> GnssMeasurement::setCallba
return ret;
}
+ clearInterfaces();
+
mGnssMeasurementCbIface_2_0 = callback;
mGnssMeasurementCbIface_2_0->linkToDeath(mGnssMeasurementDeathRecipient, 0);
diff --git a/android/2.0/GnssMeasurement.h b/android/2.0/GnssMeasurement.h
index 000b00f..7fa66b4 100644
--- a/android/2.0/GnssMeasurement.h
+++ b/android/2.0/GnssMeasurement.h
@@ -75,6 +75,7 @@ struct GnssMeasurement : public V2_0::IGnssMeasurement {
sp<V1_1::IGnssMeasurementCallback> mGnssMeasurementCbIface_1_1 = nullptr;
sp<V2_0::IGnssMeasurementCallback> mGnssMeasurementCbIface_2_0 = nullptr;
MeasurementAPIClient* mApi;
+ void clearInterfaces();
};
} // namespace implementation
diff --git a/android/2.0/location_api/MeasurementAPIClient.cpp b/android/2.0/location_api/MeasurementAPIClient.cpp
index 5894e46..17ede89 100644
--- a/android/2.0/location_api/MeasurementAPIClient.cpp
+++ b/android/2.0/location_api/MeasurementAPIClient.cpp
@@ -72,6 +72,13 @@ MeasurementAPIClient::~MeasurementAPIClient()
LOC_LOGD("%s]: ()", __FUNCTION__);
}
+void MeasurementAPIClient::clearInterfaces()
+{
+ mGnssMeasurementCbIface = nullptr;
+ mGnssMeasurementCbIface_1_1 = nullptr;
+ mGnssMeasurementCbIface_2_0 = nullptr;
+}
+
// for GpsInterface
Return<IGnssMeasurement::GnssMeasurementStatus>
MeasurementAPIClient::measurementSetCallback(const sp<V1_0::IGnssMeasurementCallback>& callback)
@@ -79,6 +86,7 @@ MeasurementAPIClient::measurementSetCallback(const sp<V1_0::IGnssMeasurementCall
LOC_LOGD("%s]: (%p)", __FUNCTION__, &callback);
mMutex.lock();
+ clearInterfaces();
mGnssMeasurementCbIface = callback;
mMutex.unlock();
@@ -94,6 +102,7 @@ MeasurementAPIClient::measurementSetCallback_1_1(
__FUNCTION__, &callback, (int)powerMode, timeBetweenMeasurement);
mMutex.lock();
+ clearInterfaces();
mGnssMeasurementCbIface_1_1 = callback;
mMutex.unlock();
@@ -109,6 +118,7 @@ MeasurementAPIClient::measurementSetCallback_2_0(
__FUNCTION__, &callback, (int)powerMode, timeBetweenMeasurement);
mMutex.lock();
+ clearInterfaces();
mGnssMeasurementCbIface_2_0 = callback;
mMutex.unlock();
diff --git a/android/2.0/location_api/MeasurementAPIClient.h b/android/2.0/location_api/MeasurementAPIClient.h
index 4146a13..731344f 100644
--- a/android/2.0/location_api/MeasurementAPIClient.h
+++ b/android/2.0/location_api/MeasurementAPIClient.h
@@ -77,8 +77,8 @@ private:
sp<V1_0::IGnssMeasurementCallback> mGnssMeasurementCbIface;
sp<V1_1::IGnssMeasurementCallback> mGnssMeasurementCbIface_1_1;
sp<V2_0::IGnssMeasurementCallback> mGnssMeasurementCbIface_2_0;
-
bool mTracking;
+ void clearInterfaces();
};
} // namespace implementation
diff --git a/android/2.1/GnssMeasurement.cpp b/android/2.1/GnssMeasurement.cpp
index 54a7b05..eb19724 100644
--- a/android/2.1/GnssMeasurement.cpp
+++ b/android/2.1/GnssMeasurement.cpp
@@ -71,18 +71,15 @@ Return<GnssMeasurement::GnssMeasurementStatus> GnssMeasurement::setCallback(
return ret;
}
+ clearInterfaces();
+
mGnssMeasurementCbIface = callback;
mGnssMeasurementCbIface->linkToDeath(mGnssMeasurementDeathRecipient, 0);
return mApi->measurementSetCallback(callback);
}
-Return<void> GnssMeasurement::close() {
- if (mApi == nullptr) {
- LOC_LOGE("%s]: mApi is nullptr", __FUNCTION__);
- return Void();
- }
-
+void GnssMeasurement::clearInterfaces() {
if (mGnssMeasurementCbIface != nullptr) {
mGnssMeasurementCbIface->unlinkToDeath(mGnssMeasurementDeathRecipient);
mGnssMeasurementCbIface = nullptr;
@@ -99,6 +96,15 @@ Return<void> GnssMeasurement::close() {
mGnssMeasurementCbIface_2_1->unlinkToDeath(mGnssMeasurementDeathRecipient);
mGnssMeasurementCbIface_2_1 = nullptr;
}
+}
+
+Return<void> GnssMeasurement::close() {
+ if (mApi == nullptr) {
+ LOC_LOGE("%s]: mApi is nullptr", __FUNCTION__);
+ return Void();
+ }
+
+ clearInterfaces();
mApi->measurementClose();
return Void();
@@ -124,6 +130,8 @@ Return<GnssMeasurement::GnssMeasurementStatus> GnssMeasurement::setCallback_1_1(
return ret;
}
+ clearInterfaces();
+
mGnssMeasurementCbIface_1_1 = callback;
mGnssMeasurementCbIface_1_1->linkToDeath(mGnssMeasurementDeathRecipient, 0);
@@ -153,6 +161,8 @@ Return<V1_0::IGnssMeasurement::GnssMeasurementStatus> GnssMeasurement::setCallba
return ret;
}
+ clearInterfaces();
+
mGnssMeasurementCbIface_2_0 = callback;
mGnssMeasurementCbIface_2_0->linkToDeath(mGnssMeasurementDeathRecipient, 0);
@@ -182,6 +192,8 @@ Return<V1_0::IGnssMeasurement::GnssMeasurementStatus> GnssMeasurement::setCallba
return ret;
}
+ clearInterfaces();
+
mGnssMeasurementCbIface_2_1 = callback;
mGnssMeasurementCbIface_2_1->linkToDeath(mGnssMeasurementDeathRecipient, 0);
diff --git a/android/2.1/GnssMeasurement.h b/android/2.1/GnssMeasurement.h
index 215fca9..2ac45c6 100755..100644
--- a/android/2.1/GnssMeasurement.h
+++ b/android/2.1/GnssMeasurement.h
@@ -81,6 +81,7 @@ struct GnssMeasurement : public V2_1::IGnssMeasurement {
sp<V2_0::IGnssMeasurementCallback> mGnssMeasurementCbIface_2_0 = nullptr;
sp<V2_1::IGnssMeasurementCallback> mGnssMeasurementCbIface_2_1 = nullptr;
MeasurementAPIClient* mApi;
+ void clearInterfaces();
};
} // namespace implementation
diff --git a/android/2.1/location_api/MeasurementAPIClient.cpp b/android/2.1/location_api/MeasurementAPIClient.cpp
index 6479d62..385a849 100644
--- a/android/2.1/location_api/MeasurementAPIClient.cpp
+++ b/android/2.1/location_api/MeasurementAPIClient.cpp
@@ -87,6 +87,14 @@ MeasurementAPIClient::~MeasurementAPIClient()
LOC_LOGD("%s]: ()", __FUNCTION__);
}
+void MeasurementAPIClient::clearInterfaces()
+{
+ mGnssMeasurementCbIface = nullptr;
+ mGnssMeasurementCbIface_1_1 = nullptr;
+ mGnssMeasurementCbIface_2_0 = nullptr;
+ mGnssMeasurementCbIface_2_1 = nullptr;
+}
+
// for GpsInterface
Return<IGnssMeasurement::GnssMeasurementStatus>
MeasurementAPIClient::measurementSetCallback(const sp<V1_0::IGnssMeasurementCallback>& callback)
@@ -94,6 +102,7 @@ MeasurementAPIClient::measurementSetCallback(const sp<V1_0::IGnssMeasurementCall
LOC_LOGD("%s]: (%p)", __FUNCTION__, &callback);
mMutex.lock();
+ clearInterfaces();
mGnssMeasurementCbIface = callback;
mMutex.unlock();
@@ -109,6 +118,7 @@ MeasurementAPIClient::measurementSetCallback_1_1(
__FUNCTION__, &callback, (int)powerMode, timeBetweenMeasurement);
mMutex.lock();
+ clearInterfaces();
mGnssMeasurementCbIface_1_1 = callback;
mMutex.unlock();
@@ -124,6 +134,7 @@ MeasurementAPIClient::measurementSetCallback_2_0(
__FUNCTION__, &callback, (int)powerMode, timeBetweenMeasurement);
mMutex.lock();
+ clearInterfaces();
mGnssMeasurementCbIface_2_0 = callback;
mMutex.unlock();
@@ -137,6 +148,7 @@ Return<IGnssMeasurement::GnssMeasurementStatus> MeasurementAPIClient::measuremen
__FUNCTION__, &callback, (int)powerMode, timeBetweenMeasurement);
mMutex.lock();
+ clearInterfaces();
mGnssMeasurementCbIface_2_1 = callback;
mMutex.unlock();
diff --git a/android/2.1/location_api/MeasurementAPIClient.h b/android/2.1/location_api/MeasurementAPIClient.h
index 4a6cb8f..e275e74 100755..100644
--- a/android/2.1/location_api/MeasurementAPIClient.h
+++ b/android/2.1/location_api/MeasurementAPIClient.h
@@ -83,8 +83,8 @@ private:
sp<V1_1::IGnssMeasurementCallback> mGnssMeasurementCbIface_1_1;
sp<V2_0::IGnssMeasurementCallback> mGnssMeasurementCbIface_2_0;
sp<V2_1::IGnssMeasurementCallback> mGnssMeasurementCbIface_2_1;
-
bool mTracking;
+ void clearInterfaces();
};
} // namespace implementation