summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
authorMathias Agopian <mathias@google.com>2011-02-03 14:52:47 -0800
committerMathias Agopian <mathias@google.com>2011-02-03 16:37:31 -0800
commit7dce874f0dae08627137044e25d6efb573dc37f5 (patch)
treeefd181cc988d7544519dee40489d4eac5055f27d /services
parent40684946cb00080c1c7424885f49a809816dd26e (diff)
downloadframeworks_base-7dce874f0dae08627137044e25d6efb573dc37f5.zip
frameworks_base-7dce874f0dae08627137044e25d6efb573dc37f5.tar.gz
frameworks_base-7dce874f0dae08627137044e25d6efb573dc37f5.tar.bz2
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: I400fa1c1389b2bd05a1d19abea8a35ec5bcba273
Diffstat (limited to 'services')
-rw-r--r--services/sensorservice/SensorService.cpp13
-rw-r--r--services/sensorservice/SensorService.h2
2 files changed, 9 insertions, 6 deletions
diff --git a/services/sensorservice/SensorService.cpp b/services/sensorservice/SensorService.cpp
index ea5e5cc..697e879 100644
--- a/services/sensorservice/SensorService.cpp
+++ b/services/sensorservice/SensorService.cpp
@@ -293,18 +293,21 @@ sp<ISensorEventConnection> SensorService::createSensorEventConnection()
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;
diff --git a/services/sensorservice/SensorService.h b/services/sensorservice/SensorService.h
index 540c7e2..21f12bd 100644
--- a/services/sensorservice/SensorService.h
+++ b/services/sensorservice/SensorService.h
@@ -129,7 +129,7 @@ class SensorService :
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);