sensorservice: switch to use sp<> in sensor list
* Switch to use smart pointer in SensorList to avoid object
life cycle issue.
* Refactor HardwareSensor and various virtual sensor class.
* Change active virtual sensor map into a set of handles.
Change-Id: I674d5eb5c0038179f9ef1b6f0d576b8b605649ec
diff --git a/services/sensorservice/SensorList.h b/services/sensorservice/SensorList.h
index 3fe73cc..ffde619 100644
--- a/services/sensorservice/SensorList.h
+++ b/services/sensorservice/SensorList.h
@@ -46,6 +46,9 @@
// After SensorInterface * is added into SensorList, it can be assumed that SensorList own the
// object it pointed to and the object should not be released elsewhere.
bool add(int handle, SensorInterface* si, bool isForDebug = false, bool isVirtual = false);
+
+ // After a handle is removed, the object that SensorInterface * pointing to may get deleted if
+ // no more sp<> of the same object exist.
bool remove(int handle);
inline bool hasAnySensor() const { return mHandleMap.size() > 0;}
@@ -57,8 +60,7 @@
const Vector<Sensor> getVirtualSensors() const;
String8 getName(int handle) const;
- const Sensor& get(int handle) const;
- SensorInterface* getInterface(int handle) const;
+ sp<SensorInterface> getInterface(int handle) const;
bool isNewHandle(int handle) const;
// Iterate through Sensor in sensor list and perform operation f on each Sensor object.
@@ -80,8 +82,7 @@
virtual ~SensorList();
private:
struct Entry {
- //TODO: use sp<> here
- SensorInterface * const si;
+ sp<SensorInterface> si;
const bool isForDebug;
const bool isVirtual;
Entry(SensorInterface* si_, bool debug_, bool virtual_) :
@@ -108,7 +109,6 @@
mutable std::mutex mLock;
std::map<int, Entry> mHandleMap;
std::unordered_set<int> mUsedHandle;
- std::vector<SensorInterface *> mRecycle;
};
template <typename TF>