From 4f707f8b3da68d3055db895da9ae5216cc4f483a Mon Sep 17 00:00:00 2001 From: Peng Xu Date: Mon, 26 Sep 2016 11:28:32 -0700 Subject: [PATCH] [sensorservice] Fix inconsistent states in SensorDevice This CL avoids inconsistent disabled client list when sensorservice is in restricted mode and a restricted sensor event connection is destroyed. The inconsistency can cause registerLister error in sensor CTS. Also removed the additional logging message since they are no longer necessary. Bug: 28533594 Test: Running "cts-tradefed run singleCommand cts-dev --module CtsHardwareTestCases --test android.hardware.cts.SensorBatchingTests" continuously while keep registering and unregistering sensor listener in a separate app (e.g. enable BreakIt mode in SensorLogger). Change-Id: I601aea87c88511f5543a80c4921ee4822cb89dff --- services/sensorservice/SensorDevice.cpp | 5 +++++ services/sensorservice/SensorDevice.h | 1 + services/sensorservice/SensorService.cpp | 3 +++ 3 files changed, 9 insertions(+) diff --git a/services/sensorservice/SensorDevice.cpp b/services/sensorservice/SensorDevice.cpp index 4fbaa502d2..ac0374232e 100644 --- a/services/sensorservice/SensorDevice.cpp +++ b/services/sensorservice/SensorDevice.cpp @@ -475,6 +475,11 @@ ssize_t SensorDevice::Info::removeBatchParamsForIdent(void* ident) { return idx; } +void SensorDevice::notifyConnectionDestroyed(void* ident) { + Mutex::Autolock _l(mLock); + mDisabledClients.remove(ident); +} + // --------------------------------------------------------------------------- }; // namespace android diff --git a/services/sensorservice/SensorDevice.h b/services/sensorservice/SensorDevice.h index 68bb853ac9..d340da31c1 100644 --- a/services/sensorservice/SensorDevice.h +++ b/services/sensorservice/SensorDevice.h @@ -51,6 +51,7 @@ public: void enableAllSensors(); void autoDisable(void *ident, int handle); status_t injectSensorData(const sensors_event_t *event); + void notifyConnectionDestroyed(void *ident); // Dumpable virtual std::string dump() const; diff --git a/services/sensorservice/SensorService.cpp b/services/sensorservice/SensorService.cpp index 2930637664..99da2c4974 100644 --- a/services/sensorservice/SensorService.cpp +++ b/services/sensorservice/SensorService.cpp @@ -995,6 +995,9 @@ void SensorService::cleanupConnection(SensorEventConnection* c) { if (c->needsWakeLock()) { checkWakeLockStateLocked(); } + + SensorDevice& dev(SensorDevice::getInstance()); + dev.notifyConnectionDestroyed(c); } sp SensorService::getSensorInterfaceFromHandle(int handle) const { -- 2.11.0