mirror of
https://github.com/Evolution-X/hardware_interfaces
synced 2026-02-01 11:36:00 +00:00
Fix deadlock in cuttlefish/default implementation
Bug: 150830099
Test: atest LocationManagerFineTest#testRegisterGnssMeasurementsCallback
-c --iterations 100
Change-Id: I70aec19a481781d924ed3008765ca624a7eeb950
Merged-In: I70aec19a481781d924ed3008765ca624a7eeb950
(cherry picked from commit 3d652709ed)
This commit is contained in:
@@ -49,8 +49,8 @@ Return<V1_0::IGnssMeasurement::GnssMeasurementStatus> GnssMeasurement::setCallba
|
||||
|
||||
Return<void> GnssMeasurement::close() {
|
||||
ALOGD("close");
|
||||
std::unique_lock<std::mutex> lock(mMutex);
|
||||
stop();
|
||||
std::unique_lock<std::mutex> lock(mMutex);
|
||||
sCallback = nullptr;
|
||||
return Void();
|
||||
}
|
||||
|
||||
@@ -61,10 +61,14 @@ struct GnssMeasurement : public IGnssMeasurement {
|
||||
void stop();
|
||||
void reportMeasurement(const GnssData&);
|
||||
|
||||
// Guarded by mMutex
|
||||
static sp<IGnssMeasurementCallback> sCallback;
|
||||
|
||||
std::atomic<long> mMinIntervalMillis;
|
||||
std::atomic<bool> mIsActive;
|
||||
std::thread mThread;
|
||||
|
||||
// Synchronization lock for sCallback
|
||||
mutable std::mutex mMutex;
|
||||
};
|
||||
|
||||
|
||||
@@ -55,8 +55,8 @@ Return<GnssAntennaInfo::GnssAntennaInfoStatus> GnssAntennaInfo::setCallback(
|
||||
|
||||
Return<void> GnssAntennaInfo::close() {
|
||||
ALOGD("close");
|
||||
std::unique_lock<std::mutex> lock(mMutex);
|
||||
stop();
|
||||
std::unique_lock<std::mutex> lock(mMutex);
|
||||
sCallback = nullptr;
|
||||
return Void();
|
||||
}
|
||||
|
||||
@@ -47,10 +47,14 @@ struct GnssAntennaInfo : public IGnssAntennaInfo {
|
||||
void reportAntennaInfo(
|
||||
const hidl_vec<IGnssAntennaInfoCallback::GnssAntennaInfo>& antennaInfo) const;
|
||||
|
||||
// Guarded by mMutex
|
||||
static sp<IGnssAntennaInfoCallback> sCallback;
|
||||
|
||||
std::atomic<long> mMinIntervalMillis;
|
||||
std::atomic<bool> mIsActive;
|
||||
std::thread mThread;
|
||||
|
||||
// Synchronization lock for sCallback
|
||||
mutable std::mutex mMutex;
|
||||
};
|
||||
|
||||
@@ -60,4 +64,4 @@ struct GnssAntennaInfo : public IGnssAntennaInfo {
|
||||
} // namespace hardware
|
||||
} // namespace android
|
||||
|
||||
#endif // ANDROID_HARDWARE_GNSS_V2_1_GNSSCONFIGURATION_H
|
||||
#endif // ANDROID_HARDWARE_GNSS_V2_1_GNSSCONFIGURATION_H
|
||||
|
||||
@@ -47,8 +47,8 @@ Return<V1_0::IGnssMeasurement::GnssMeasurementStatus> GnssMeasurement::setCallba
|
||||
|
||||
Return<void> GnssMeasurement::close() {
|
||||
ALOGD("close");
|
||||
std::unique_lock<std::mutex> lock(mMutex);
|
||||
stop();
|
||||
std::unique_lock<std::mutex> lock(mMutex);
|
||||
sCallback_2_1 = nullptr;
|
||||
sCallback_2_0 = nullptr;
|
||||
return Void();
|
||||
|
||||
@@ -66,11 +66,17 @@ struct GnssMeasurement : public IGnssMeasurement {
|
||||
void reportMeasurement(const GnssDataV2_0&);
|
||||
void reportMeasurement(const GnssDataV2_1&);
|
||||
|
||||
// Guarded by mMutex
|
||||
static sp<V2_1::IGnssMeasurementCallback> sCallback_2_1;
|
||||
|
||||
// Guarded by mMutex
|
||||
static sp<V2_0::IGnssMeasurementCallback> sCallback_2_0;
|
||||
|
||||
std::atomic<long> mMinIntervalMillis;
|
||||
std::atomic<bool> mIsActive;
|
||||
std::thread mThread;
|
||||
|
||||
// Synchronization lock for sCallback_2_1 and sCallback_2_0
|
||||
mutable std::mutex mMutex;
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user