SensorDeviceUtils: do not create sp(this) in constructor.
This may cause refcount problems as stated in RefBase
document. Do this in HidlServiceRegistrationWaiter::onFirstRef
instead.
Test: boots multiple times
Bug: 68765551
Change-Id: Iae2589f7e003cb8d44fe6ca43f1342b89125f763
diff --git a/services/sensorservice/SensorDeviceUtils.cpp b/services/sensorservice/SensorDeviceUtils.cpp
index 30de63f..dbafffe 100644
--- a/services/sensorservice/SensorDeviceUtils.cpp
+++ b/services/sensorservice/SensorDeviceUtils.cpp
@@ -29,6 +29,11 @@
namespace SensorDeviceUtils {
HidlServiceRegistrationWaiter::HidlServiceRegistrationWaiter() {
+}
+
+void HidlServiceRegistrationWaiter::onFirstRef() {
+ // Creating sp<...>(this) in the constructor should be avoided, hence
+ // registerForNotifications is called in onFirstRef callback.
mRegistered = ISensors::registerForNotifications("default", this);
}
diff --git a/services/sensorservice/SensorDeviceUtils.h b/services/sensorservice/SensorDeviceUtils.h
index 4e42914..e2eb606 100644
--- a/services/sensorservice/SensorDeviceUtils.h
+++ b/services/sensorservice/SensorDeviceUtils.h
@@ -46,6 +46,8 @@
* @return true if service is restart since last reset(); false otherwise.
*/
bool wait();
+protected:
+ void onFirstRef() override;
private:
bool mRegistered;