Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 266c36a5 authored by Yu-Han Yang's avatar Yu-Han Yang
Browse files

Fix deadlock in reportMeasurement() and stop()

Bug: 187361220
Test: atest android.location.cts.fine.LocationManagerFineTest#testRegisterGnssMeasurementsCallback --iteration=20
Change-Id: I4c35be19864d851170c0c8f0981fecab423f2a74
parent 753e88cf
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -43,7 +43,6 @@ GnssHidlHal::GnssHidlHal(const std::shared_ptr<Gnss>& gnssAidl) : mGnssAidl(gnss

hidl_vec<GnssSvInfo> GnssHidlHal::filterBlocklistedSatellitesV2_1(
        hidl_vec<GnssSvInfo> gnssSvInfoList) {
    ALOGD("GnssHidlHal::filterBlocklistSatellitesV2_1");
    if (mGnssConfigurationAidl == nullptr) {
        ALOGE("Handle to AIDL GnssConfiguration is not available.");
        return gnssSvInfoList;
+9 −8
Original line number Diff line number Diff line
@@ -75,19 +75,20 @@ void GnssMeasurementInterface::start(const bool enableCorrVecOutputs) {
void GnssMeasurementInterface::stop() {
    ALOGD("stop");
    mIsActive = false;
    if (mThread.joinable()) {
        mThread.join();
    }
}

void GnssMeasurementInterface::reportMeasurement(const GnssData& data) {
    ALOGD("reportMeasurement()");
    std::shared_ptr<IGnssMeasurementCallback> callbackCopy;
    {
        std::unique_lock<std::mutex> lock(mMutex);
        if (sCallback == nullptr) {
            ALOGE("%s: GnssMeasurement::sCallback is null.", __func__);
            return;
        }
    sCallback->gnssMeasurementCb(data);
        callbackCopy = sCallback;
    }
    callbackCopy->gnssMeasurementCb(data);
}

}  // namespace aidl::android::hardware::gnss