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

Commit 4f707f8b authored by Peng Xu's avatar Peng Xu Committed by Andrew Rossignol
Browse files

[sensorservice] Fix inconsistent states in SensorDevice

This CL avoids inconsistent disabled client list when sensorservice
is in restricted mode and a restricted sensor event connection is
destroyed.

The inconsistency can cause registerLister error in sensor CTS.

Also removed the additional logging message since they are no longer
necessary.

Bug: 28533594

Test: Running "cts-tradefed run singleCommand cts-dev --module
CtsHardwareTestCases --test android.hardware.cts.SensorBatchingTests"
continuously while keep registering and unregistering sensor listener
in a separate app (e.g. enable BreakIt mode in SensorLogger).

Change-Id: I601aea87c88511f5543a80c4921ee4822cb89dff
parent a92604b3
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -475,6 +475,11 @@ ssize_t SensorDevice::Info::removeBatchParamsForIdent(void* ident) {
    return idx;
}

void SensorDevice::notifyConnectionDestroyed(void* ident) {
    Mutex::Autolock _l(mLock);
    mDisabledClients.remove(ident);
}

// ---------------------------------------------------------------------------
}; // namespace android
+1 −0
Original line number Diff line number Diff line
@@ -51,6 +51,7 @@ public:
    void enableAllSensors();
    void autoDisable(void *ident, int handle);
    status_t injectSensorData(const sensors_event_t *event);
    void notifyConnectionDestroyed(void *ident);

    // Dumpable
    virtual std::string dump() const;
+3 −0
Original line number Diff line number Diff line
@@ -995,6 +995,9 @@ void SensorService::cleanupConnection(SensorEventConnection* c) {
    if (c->needsWakeLock()) {
        checkWakeLockStateLocked();
    }

    SensorDevice& dev(SensorDevice::getInstance());
    dev.notifyConnectionDestroyed(c);
}

sp<SensorInterface> SensorService::getSensorInterfaceFromHandle(int handle) const {