Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f11bf284 authored by Mathias Agopian's avatar Mathias Agopian Committed by Android Git Automerger
Browse files

am 305bc0fe: Merge "Fix a race condition in sensormanager" into gingerbread

* commit '305bc0fe':
  Fix a race condition in sensormanager
parents 99866c11 305bc0fe
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -464,6 +464,7 @@ void SensorService::SensorEventConnection::onFirstRef()
}

bool SensorService::SensorEventConnection::addSensor(int32_t handle) {
    Mutex::Autolock _l(mConnectionLock);
    if (mSensorInfo.indexOfKey(handle) <= 0) {
        SensorInfo info;
        mSensorInfo.add(handle, info);
@@ -473,6 +474,7 @@ bool SensorService::SensorEventConnection::addSensor(int32_t handle) {
}

bool SensorService::SensorEventConnection::removeSensor(int32_t handle) {
    Mutex::Autolock _l(mConnectionLock);
    if (mSensorInfo.removeItem(handle) >= 0) {
        return true;
    }
@@ -480,16 +482,19 @@ bool SensorService::SensorEventConnection::removeSensor(int32_t handle) {
}

bool SensorService::SensorEventConnection::hasSensor(int32_t handle) const {
    Mutex::Autolock _l(mConnectionLock);
    return mSensorInfo.indexOfKey(handle) >= 0;
}

bool SensorService::SensorEventConnection::hasAnySensor() const {
    Mutex::Autolock _l(mConnectionLock);
    return mSensorInfo.size() ? true : false;
}

status_t SensorService::SensorEventConnection::setEventRateLocked(
        int handle, nsecs_t ns)
{
    Mutex::Autolock _l(mConnectionLock);
    ssize_t index = mSensorInfo.indexOfKey(handle);
    if (index >= 0) {
        SensorInfo& info = mSensorInfo.editValueFor(handle);
@@ -506,6 +511,7 @@ status_t SensorService::SensorEventConnection::sendEvents(
    // filter out events not for this connection
    size_t count = 0;
    if (scratch) {
        Mutex::Autolock _l(mConnectionLock);
        size_t i=0;
        while (i<numEvents) {
            const int32_t curr = buffer[i].sensor;
+2 −1
Original line number Diff line number Diff line
@@ -75,8 +75,9 @@ class SensorService :

        sp<SensorService> const mService;
        sp<SensorChannel> const mChannel;
        mutable Mutex mConnectionLock;

        // protected by SensorService::mLock
        // protected mConnectionLock
        struct SensorInfo {
            SensorInfo() : ns(DEFAULT_EVENTS_PERIOD) { }
            nsecs_t ns;