diff options
author | Mike Cailean <mcailean@codeaurora.org> | 2020-06-25 17:47:59 -0700 |
---|---|---|
committer | Mike Cailean <mcailean@codeaurora.org> | 2020-06-26 17:18:01 -0700 |
commit | b26e5ea22b00e8c4d7f5c82af0c8979d885738f9 (patch) | |
tree | 061b369d54f881fba32b719f0a561923cba5a51f /android | |
parent | 516d8d128ae3d1e3e9786a14731a18b924c4abca (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.cpp | 22 | ||||
-rw-r--r-- | android/2.0/GnssMeasurement.h | 1 | ||||
-rw-r--r-- | android/2.0/location_api/MeasurementAPIClient.cpp | 10 | ||||
-rw-r--r-- | android/2.0/location_api/MeasurementAPIClient.h | 2 | ||||
-rw-r--r-- | android/2.1/GnssMeasurement.cpp | 24 | ||||
-rw-r--r--[-rwxr-xr-x] | android/2.1/GnssMeasurement.h | 1 | ||||
-rw-r--r-- | android/2.1/location_api/MeasurementAPIClient.cpp | 12 | ||||
-rw-r--r--[-rwxr-xr-x] | android/2.1/location_api/MeasurementAPIClient.h | 2 |
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 |