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

Commit 008a08dc authored by Gopal Krishna Shukla's avatar Gopal Krishna Shukla Committed by Shibin George
Browse files

Schedule agentDisconnected() in handler thread

BackupManager.agentDisconnected() need not acquire
ActivityManagerService lock. Post this in handler thread.
This will avoid a potential deadlock between
ActivityManagerService lock and BackupManagerService lock.

Test: Build successful

Change-Id: Iabea1159d3e2bd8980c8a0d068fb5d0583c08535
parent ff5c3ad0
Loading
Loading
Loading
Loading
+24 −14
Original line number Diff line number Diff line
@@ -6346,6 +6346,9 @@ public final class ActivityManagerService extends ActivityManagerNative
            removeLruProcessLocked(app);
            if (mBackupTarget != null && mBackupTarget.app.pid == pid) {
                Slog.w(TAG, "Unattached app died before backup, skipping");
                mHandler.post(new Runnable() {
                @Override
                    public void run(){
                        try {
                            IBackupManager bm = IBackupManager.Stub.asInterface(
                                    ServiceManager.getService(Context.BACKUP_SERVICE));
@@ -6354,6 +6357,8 @@ public final class ActivityManagerService extends ActivityManagerNative
                            // Can't happen; the backup manager is local
                        }
                    }
                });
            }
            if (isPendingBroadcastProcessLocked(pid)) {
                Slog.w(TAG, "Unattached app died before broadcast acknowledged, skipping");
                skipPendingBroadcastLocked(pid);
@@ -16761,6 +16766,9 @@ public final class ActivityManagerService extends ActivityManagerNative
        if (mBackupTarget != null && app.pid == mBackupTarget.app.pid) {
            if (DEBUG_BACKUP || DEBUG_CLEANUP) Slog.d(TAG_CLEANUP, "App "
                    + mBackupTarget.appInfo + " died during backup");
            mHandler.post(new Runnable() {
                @Override
                public void run(){
                    try {
                        IBackupManager bm = IBackupManager.Stub.asInterface(
                                ServiceManager.getService(Context.BACKUP_SERVICE));
@@ -16769,6 +16777,8 @@ public final class ActivityManagerService extends ActivityManagerNative
                        // can't happen; backup manager is local
                    }
                }
            });
        }
        for (int i = mPendingProcessChanges.size() - 1; i >= 0; i--) {
            ProcessChangeItem item = mPendingProcessChanges.get(i);