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

Commit 12f783d6 authored by Christopher Tate's avatar Christopher Tate
Browse files

Don't crash when backup timeout races with agent completion

There's a narrow window of time in which an agent reporting that its
operation has completed races with timeouts such that we wind up
handling the completion callback just after certain fundamental state
has been reset.  Detect this race and proceed gracefully instead of
crashing.

Bug 19498669

Change-Id: I5a475527db1a55a8e567366ddfb10112e427682e
parent a1879609
Loading
Loading
Loading
Loading
+16 −1
Original line number Diff line number Diff line
@@ -2778,7 +2778,22 @@ public class BackupManagerService {

        @Override
        public void operationComplete() {
            // Okay, the agent successfully reported back to us!
            // The agent reported back to us!

            if (mBackupData == null) {
                // This callback was racing with our timeout, so we've cleaned up the
                // agent state already and are on to the next thing.  We have nothing
                // further to do here: agent state having been cleared means that we've
                // initiated the appropriate next operation.
                final String pkg = (mCurrentPackage != null)
                        ? mCurrentPackage.packageName : "[none]";
                if (DEBUG) {
                    Slog.i(TAG, "Callback after agent teardown: " + pkg);
                }
                addBackupTrace("late opComplete; curPkg = " + pkg);
                return;
            }

            final String pkgName = mCurrentPackage.packageName;
            final long filepos = mBackupDataName.length();
            FileDescriptor fd = mBackupData.getFileDescriptor();