fix [3421350] Killing a game that uses the accelerometer renders the device unable to sleep
when an app dies, make sure to disable all sensors that process is connected to, regardless of wether this was the LAST connection to this sensor. Change-Id: I9c72b1792eee03815304674d5c2f25b5270e4748
This commit is contained in:
parent
2cf098846c
commit
db5b4bce9e
@ -293,18 +293,21 @@ sp<ISensorEventConnection> SensorService::createSensorEventConnection()
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SensorService::cleanupConnection(const wp<SensorEventConnection>& connection)
|
void SensorService::cleanupConnection(SensorEventConnection* c)
|
||||||
{
|
{
|
||||||
Mutex::Autolock _l(mLock);
|
Mutex::Autolock _l(mLock);
|
||||||
|
const wp<SensorEventConnection> connection(c);
|
||||||
size_t size = mActiveSensors.size();
|
size_t size = mActiveSensors.size();
|
||||||
for (size_t i=0 ; i<size ; ) {
|
for (size_t i=0 ; i<size ; ) {
|
||||||
SensorRecord* rec = mActiveSensors.valueAt(i);
|
int handle = mActiveSensors.keyAt(i);
|
||||||
if (rec && rec->removeConnection(connection)) {
|
if (c->hasSensor(handle)) {
|
||||||
int handle = mActiveSensors.keyAt(i);
|
|
||||||
SensorInterface* sensor = mSensorMap.valueFor( handle );
|
SensorInterface* sensor = mSensorMap.valueFor( handle );
|
||||||
if (sensor) {
|
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);
|
mActiveSensors.removeItemsAt(i, 1);
|
||||||
mActiveVirtualSensors.removeItem(handle);
|
mActiveVirtualSensors.removeItem(handle);
|
||||||
delete rec;
|
delete rec;
|
||||||
|
@ -129,7 +129,7 @@ class SensorService :
|
|||||||
public:
|
public:
|
||||||
static char const* getServiceName() { return "sensorservice"; }
|
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 enable(const sp<SensorEventConnection>& connection, int handle);
|
||||||
status_t disable(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);
|
status_t setEventRate(const sp<SensorEventConnection>& connection, int handle, nsecs_t ns);
|
||||||
|
Loading…
Reference in New Issue
Block a user