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

Commit 8a27f923 authored by Christopher Tate's avatar Christopher Tate
Browse files

Don't crash in various ways when using backup services too early

BackupManager now no longer tries to use a null service binder if it's used
early during the boot process.  ActivityManagerService no longer tries to
dereference null pointers if bind/unbind semantics get out of step due to things
being run too early.
parent c73a218c
Loading
Loading
Loading
Loading
+10 −6
Original line number Diff line number Diff line
@@ -68,11 +68,13 @@ public class BackupManager {
     * {@link android.app.BackupAgent} subclass will be scheduled when you call this method.
     */
    public void dataChanged() {
        if (mService != null) {
            try {
                mService.dataChanged(mContext.getPackageName());
            } catch (RemoteException e) {
            }
        }
    }

    /**
     * Begin the process of restoring system data from backup.  This method requires
@@ -83,10 +85,12 @@ public class BackupManager {
     */
    public IRestoreSession beginRestoreSession(int transportID) {
        IRestoreSession binder = null;
        if (mService != null) {
            try {
                binder = mService.beginRestoreSession(transportID);
            } catch (RemoteException e) {
            }
        }
        return binder;
    }
}
+9 −0
Original line number Diff line number Diff line
@@ -10472,8 +10472,17 @@ public final class ActivityManagerService extends ActivityManagerNative implemen
    // done with this agent
    public void unbindBackupAgent(ApplicationInfo appInfo) {
        if (DEBUG_BACKUP) Log.v(TAG, "unbindBackupAgent: " + appInfo);
        if (appInfo == null) {
            Log.w(TAG, "unbind backup agent for null app");
            return;
        }

        synchronized(this) {
            if (mBackupAppName == null) {
                Log.w(TAG, "Unbinding backup agent with no active backup");
                return;
            }

            if (!mBackupAppName.equals(appInfo.packageName)) {
                Log.e(TAG, "Unbind of " + appInfo + " but is not the current backup target");
                return;