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

Commit e7f966d5 authored by Amith Yamasani's avatar Amith Yamasani
Browse files

Mark all published authorities for a provider as ready

There could be more than one authority in a published provider.
Make sure the waiting acquireProvider() calls are notified
for each of the published authorities.

Fixes: 186333995
Test: atest MultiAuthorityTest
      Manual: Start a work profile app while work profile is stopped
      Verify that the app starts faster than the 20 second
      timeout for acquireProvider()
Change-Id: Iaad58949debeead6ea477aa440b13ba4ddc1198e
parent 8b6cc5fd
Loading
Loading
Loading
Loading
+9 −6
Original line number Diff line number Diff line
@@ -447,7 +447,7 @@ public final class ActivityThread extends ClientTransactionHandler

        @GuardedBy("mLock")
        ContentProviderHolder mHolder; // Temp holder to be used between notifier and waiter
        Object mLock; // The lock to be used to get notified when the provider is ready
        final Object mLock; // The lock to be used to get notified when the provider is ready

        public ProviderKey(String authority, int userId) {
            this.authority = authority;
@@ -1827,13 +1827,16 @@ public final class ActivityThread extends ClientTransactionHandler

        @Override
        public void notifyContentProviderPublishStatus(@NonNull ContentProviderHolder holder,
                @NonNull String auth, int userId, boolean published) {
                @NonNull String authorities, int userId, boolean published) {
            final String auths[] = authorities.split(";");
            for (String auth: auths) {
                final ProviderKey key = getGetProviderKey(auth, userId);
                synchronized (key.mLock) {
                    key.mHolder = holder;
                    key.mLock.notifyAll();
                }
            }
        }

        @Override
        public void instrumentWithoutRestart(ComponentName instrumentationName,
+1 −1
Original line number Diff line number Diff line
@@ -153,7 +153,7 @@ oneway interface IApplicationThread {
    void performDirectAction(IBinder activityToken, String actionId,
            in Bundle arguments, in RemoteCallback cancellationCallback,
            in RemoteCallback resultCallback);
    void notifyContentProviderPublishStatus(in ContentProviderHolder holder, String auth,
    void notifyContentProviderPublishStatus(in ContentProviderHolder holder, String authorities,
            int userId, boolean published);
    void instrumentWithoutRestart(in ComponentName instrumentationName,
            in Bundle instrumentationArgs,