diff options
| author | 2017-11-02 16:19:19 -0700 | |
|---|---|---|
| committer | 2017-11-03 17:14:59 +0000 | |
| commit | a53e89d23480db1bcc166afd0179ee4856cd38b5 (patch) | |
| tree | 45e55f78497d36b83cd365dea6a70f73388618fd | |
| parent | 532a55248b3805954f5c52c9b34e5db100bbfd41 (diff) | |
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
| -rw-r--r-- | services/sensorservice/SensorDeviceUtils.cpp | 5 | ||||
| -rw-r--r-- | services/sensorservice/SensorDeviceUtils.h | 2 |
2 files changed, 7 insertions, 0 deletions
diff --git a/services/sensorservice/SensorDeviceUtils.cpp b/services/sensorservice/SensorDeviceUtils.cpp index 30de63fd79..dbafffe303 100644 --- a/services/sensorservice/SensorDeviceUtils.cpp +++ b/services/sensorservice/SensorDeviceUtils.cpp @@ -29,6 +29,11 @@ namespace android { 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 4e429146eb..e2eb606b9a 100644 --- a/services/sensorservice/SensorDeviceUtils.h +++ b/services/sensorservice/SensorDeviceUtils.h @@ -46,6 +46,8 @@ public: * @return true if service is restart since last reset(); false otherwise. */ bool wait(); +protected: + void onFirstRef() override; private: bool mRegistered; |