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

Commit d34100b3 authored by Eino-Ville Talvala's avatar Eino-Ville Talvala Committed by android-build-merger
Browse files

Merge changes from topic "uid_war"

am: 0a0cfbd2

Change-Id: I2fae8034df5cb974edd8ff7a3c7b6a3448291f8f
parents c8f13ba2 0a0cfbd2
Loading
Loading
Loading
Loading
+9 −3
Original line number Diff line number Diff line
@@ -2434,7 +2434,8 @@ bool CameraService::UidPolicy::isUidActive(uid_t uid, String16 callingPackage) {
    return isUidActiveLocked(uid, callingPackage);
}

static const int kPollUidActiveTimeoutMillis = 50;
static const int64_t kPollUidActiveTimeoutTotalMillis = 300;
static const int64_t kPollUidActiveTimeoutMillis = 50;

bool CameraService::UidPolicy::isUidActiveLocked(uid_t uid, String16 callingPackage) {
    // Non-app UIDs are considered always active
@@ -2462,7 +2463,8 @@ bool CameraService::UidPolicy::isUidActiveLocked(uid_t uid, String16 callingPack
            // activity being resumed. The proper fix is very risky, so we temporary add
            // some polling which should happen pretty rarely anyway as the race is hard
            // to hit.
            active = am.isUidActive(uid, callingPackage);
            active = mActiveUids.find(uid) != mActiveUids.end();
            if (!active) active = am.isUidActive(uid, callingPackage);
            if (active) {
                break;
            }
@@ -2470,11 +2472,15 @@ bool CameraService::UidPolicy::isUidActiveLocked(uid_t uid, String16 callingPack
                startTimeMillis = uptimeMillis();
            }
            int64_t ellapsedTimeMillis = uptimeMillis() - startTimeMillis;
            int64_t remainingTimeMillis = kPollUidActiveTimeoutMillis - ellapsedTimeMillis;
            int64_t remainingTimeMillis = kPollUidActiveTimeoutTotalMillis - ellapsedTimeMillis;
            if (remainingTimeMillis <= 0) {
                break;
            }
            remainingTimeMillis = std::min(kPollUidActiveTimeoutMillis, remainingTimeMillis);

            mUidLock.unlock();
            usleep(remainingTimeMillis * 1000);
            mUidLock.lock();
        } while (true);

        if (active) {