Fix a few known issues in SensorService
This CL fixes a few known issues in sensorservice which is related
to newly added dynamic sensor discovery API.
* check and ensure handle uniqueness for dynamically discovered
sensor.
* add mutex for synchronizing r/w of various sensor lists.
* ensure dynamic sensor list is reported sorted by handle.
* code format fix
Bug:
b/27911774
Change-Id: Iec6df90ae150321ea9e4309b2ac1200b8dc37f05
diff --git a/services/sensorservice/SensorService.h b/services/sensorservice/SensorService.h
index ef4516b..35f6f3d 100644
--- a/services/sensorservice/SensorService.h
+++ b/services/sensorservice/SensorService.h
@@ -160,6 +160,7 @@
static int getNumEventsForSensorType(int sensor_event_type);
String8 getSensorName(int handle) const;
bool isVirtualSensor(int handle) const;
+ SensorInterface* getSensorInterfaceFromHandle(int handle) const;
Sensor getSensorFromHandle(int handle) const;
bool isWakeUpSensor(int type) const;
void recordLastValueLocked(sensors_event_t const* buffer, size_t count);
@@ -181,6 +182,7 @@
void checkWakeLockStateLocked();
bool isWakeLockAcquired();
bool isWakeUpSensorEvent(const sensors_event_t& event) const;
+ bool isNewHandle(int handle);
SensorRecord * getSensorRecord(int handle);
@@ -211,13 +213,15 @@
status_t resetToNormalMode();
status_t resetToNormalModeLocked();
- // constants
+ // lists and maps
+ mutable Mutex mSensorsLock;
Vector<Sensor> mSensorList;
Vector<Sensor> mUserSensorListDebug;
Vector<Sensor> mUserSensorList;
Vector<Sensor> mDynamicSensorList;
DefaultKeyedVector<int, SensorInterface*> mSensorMap;
Vector<SensorInterface *> mVirtualSensorList;
+ Vector<int> mUsedHandleList;
status_t mInitCheck;
// Socket buffersize used to initialize BitTube. This size depends on whether batching is