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

Commit 66c0bace authored by Soonil Nagarkar's avatar Soonil Nagarkar
Browse files

Fix nondeterminism in LMS

When provider properties are set asynchronously, there is a race
condition with getProviderProperties on whether those properties are
immediately visible or not. Fix this, and make mock providers disabled
by default (as CTS tests appear to expect).

Bug: 122898923
Test: Manual + CTS
Change-Id: I731b6b12f13f3dce6d4ccaf7d24abe3712a5f3f2
parent bbb98bee
Loading
Loading
Loading
Loading
+7 −6
Original line number Diff line number Diff line
@@ -1041,12 +1041,13 @@ public class LocationManagerService extends ILocationManager.Stub {

        @Override
        public void onSetProperties(ProviderProperties properties) {
            // move calls coming from below LMS onto a different thread to avoid deadlock
            runInternal(() -> {
            // because this does not invoke any other methods which might result in calling back
            // into the location provider, it is safe to run this on the calling thread. it is also
            // currently necessary to run this on the calling thread to ensure that property changes
            // are publicly visibly immediately, ie for mock providers which are created.
            synchronized (mLock) {
                mProperties = properties;
            }
            });
        }

        @GuardedBy("mLock")
+0 −1
Original line number Diff line number Diff line
@@ -52,7 +52,6 @@ public class MockProvider extends AbstractLocationProvider {
        mExtras = null;

        setProperties(properties);
        setEnabled(true);
    }

    /** Sets the enabled state of this mock provider. */