summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Yifan Hong <elsk@google.com> 2017-11-02 16:19:19 -0700
committer Yifan Hong <elsk@google.com> 2017-11-03 17:14:59 +0000
commita53e89d23480db1bcc166afd0179ee4856cd38b5 (patch)
tree45e55f78497d36b83cd365dea6a70f73388618fd
parent532a55248b3805954f5c52c9b34e5db100bbfd41 (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.cpp5
-rw-r--r--services/sensorservice/SensorDeviceUtils.h2
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;