return result;
}
-void SensorService::cleanupConnection(const wp<SensorEventConnection>& connection)
+void SensorService::cleanupConnection(SensorEventConnection* c)
{
Mutex::Autolock _l(mLock);
+ const wp<SensorEventConnection> connection(c);
size_t size = mActiveSensors.size();
for (size_t i=0 ; i<size ; ) {
- SensorRecord* rec = mActiveSensors.valueAt(i);
- if (rec && rec->removeConnection(connection)) {
- int handle = mActiveSensors.keyAt(i);
+ int handle = mActiveSensors.keyAt(i);
+ if (c->hasSensor(handle)) {
SensorInterface* sensor = mSensorMap.valueFor( handle );
if (sensor) {
- sensor->activate(connection.unsafe_get(), false);
+ sensor->activate(c, false);
}
+ }
+ SensorRecord* rec = mActiveSensors.valueAt(i);
+ if (rec && rec->removeConnection(connection)) {
mActiveSensors.removeItemsAt(i, 1);
mActiveVirtualSensors.removeItem(handle);
delete rec;
public:
static char const* getServiceName() { return "sensorservice"; }
- void cleanupConnection(const wp<SensorEventConnection>& connection);
+ void cleanupConnection(SensorEventConnection* connection);
status_t enable(const sp<SensorEventConnection>& connection, int handle);
status_t disable(const sp<SensorEventConnection>& connection, int handle);
status_t setEventRate(const sp<SensorEventConnection>& connection, int handle, nsecs_t ns);