diff options
| author | Mathias Agopian <mathias@google.com> | 2010-12-01 09:21:09 -0800 |
|---|---|---|
| committer | Android Git Automerger <android-git-automerger@android.com> | 2010-12-01 09:21:09 -0800 |
| commit | 6ff08a80dc24e5c4bf8f4513e6d1f8b5bdc8a662 (patch) | |
| tree | 3faba48b28bd6d6256597a4120fbff8228bd3c54 /services/sensorservice/SensorDevice.cpp | |
| parent | 33962f8c7dee1271be2c08e06f903db938be749b (diff) | |
| parent | 3248b484a246f18853c284d6705b1cb9c2e52d77 (diff) | |
| download | frameworks_base-6ff08a80dc24e5c4bf8f4513e6d1f8b5bdc8a662.zip frameworks_base-6ff08a80dc24e5c4bf8f4513e6d1f8b5bdc8a662.tar.gz frameworks_base-6ff08a80dc24e5c4bf8f4513e6d1f8b5bdc8a662.tar.bz2 | |
am 3248b484: am b483d5cd: fix [3237242] sensormanager sensor active count gets out of sync
* commit '3248b484a246f18853c284d6705b1cb9c2e52d77':
fix [3237242] sensormanager sensor active count gets out of sync
Diffstat (limited to 'services/sensorservice/SensorDevice.cpp')
| -rw-r--r-- | services/sensorservice/SensorDevice.cpp | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/services/sensorservice/SensorDevice.cpp b/services/sensorservice/SensorDevice.cpp index 73f85ba..f192913 100644 --- a/services/sensorservice/SensorDevice.cpp +++ b/services/sensorservice/SensorDevice.cpp @@ -137,9 +137,8 @@ void SensorDevice::dump(String8& result, char* buffer, size_t SIZE) Mutex::Autolock _l(mLock); for (size_t i=0 ; i<size_t(count) ; i++) { - snprintf(buffer, SIZE, "handle=0x%08x, active-count=%d / %d\n", + snprintf(buffer, SIZE, "handle=0x%08x, active-count=%d\n", list[i].handle, - mActivationCount.valueFor(list[i].handle).count, mActivationCount.valueFor(list[i].handle).rates.size()); result.append(buffer); } @@ -167,22 +166,25 @@ status_t SensorDevice::activate(void* ident, int handle, int enabled) bool actuateHardware = false; Info& info( mActivationCount.editValueFor(handle) ); - int32_t& count(info.count); if (enabled) { - if (android_atomic_inc(&count) == 0) { - actuateHardware = true; - } Mutex::Autolock _l(mLock); if (info.rates.indexOfKey(ident) < 0) { info.rates.add(ident, DEFAULT_EVENTS_PERIOD); - } - } else { - if (android_atomic_dec(&count) == 1) { actuateHardware = true; + } else { + // sensor was already activated for this ident } + } else { Mutex::Autolock _l(mLock); - info.rates.removeItem(ident); + if (info.rates.removeItem(ident) >= 0) { + if (info.rates.size() == 0) { + actuateHardware = true; + } + } else { + // sensor wasn't enabled for this ident + } } + if (actuateHardware) { err = mSensorDevice->activate(mSensorDevice, handle, enabled); if (enabled) { |
