Avoid deadlock if HAL dies at init
The SensorDevice constructor is invoked with the Singleton lock held, so
ensure we won't attempt to call getInstance() from this context via
handleHidlDeath().
Bug: 133445520
Test: use custom HAL that crashes at first getSensorList query, verify
framework does not deadlock
Change-Id: Ia0903412cdb30474c962687bc95b8df6bf2df25e
diff --git a/services/sensorservice/SensorDevice.h b/services/sensorservice/SensorDevice.h
index e99ad9b..d2c6994 100644
--- a/services/sensorservice/SensorDevice.h
+++ b/services/sensorservice/SensorDevice.h
@@ -211,14 +211,14 @@
status_t batchLocked(void* ident, int handle, int flags, int64_t samplingPeriodNs,
int64_t maxBatchReportLatencyNs);
- static void handleHidlDeath(const std::string &detail);
+ void handleHidlDeath(const std::string &detail);
template<typename T>
- static void checkReturn(const Return<T>& ret) {
+ void checkReturn(const Return<T>& ret) {
if (!ret.isOk()) {
handleHidlDeath(ret.description());
}
}
- static status_t checkReturnAndGetStatus(const Return<Result>& ret);
+ status_t checkReturnAndGetStatus(const Return<Result>& ret);
//TODO(b/67425500): remove waiter after bug is resolved.
sp<SensorDeviceUtils::HidlServiceRegistrationWaiter> mRestartWaiter;