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

Commit 66c94726 authored by Christopher Tate's avatar Christopher Tate
Browse files

Fix system server crash when told to init backup transports

Refactor + merge gone awry; and pay attention to typed vs typeless
use of toArray().

Change-Id: I031ded949a6e3f2a296c9bf007129e4ebf796a4b
Fix: 67419822
Test: adb root && adb wait-for-device && \
      adb shell cmd activity broadcast -a android.app.backup.intent.INIT
parent a4fabd3e
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -653,7 +653,7 @@ public class RefactoredBackupManagerService implements BackupManagerServiceInter

    // Persistently track the need to do a full init
    private static final String INIT_SENTINEL_FILE_NAME = "_need_init_";
    private ArraySet<String> mPendingInits = new ArraySet<>();  // transport names
    private final ArraySet<String> mPendingInits = new ArraySet<>();  // transport names

    // Round-robin queue for scheduling full backup passes
    private static final int SCHEDULE_FILE_VERSION = 1; // current version of the schedule file
+13 −9
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ import static com.android.server.backup.RefactoredBackupManagerService.TAG;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.ArraySet;
import android.util.Slog;

import com.android.server.backup.RefactoredBackupManagerService;
@@ -38,20 +39,23 @@ public class RunInitializeReceiver extends BroadcastReceiver {
    public void onReceive(Context context, Intent intent) {
        if (RUN_INITIALIZE_ACTION.equals(intent.getAction())) {
            synchronized (backupManagerService.getQueueLock()) {
                final ArraySet<String> pendingInits = backupManagerService.getPendingInits();
                if (DEBUG) {
                    Slog.v(TAG, "Running a device init");
                    Slog.v(TAG, "Running a device init; " + pendingInits.size() + " pending");
                }

                String[] pendingInits = (String[]) backupManagerService.getPendingInits().toArray();
                backupManagerService.clearPendingInits();
                if (pendingInits.size() > 0) {
                    final String[] transports = pendingInits.toArray(new String[pendingInits.size()]);
                    PerformInitializeTask initTask = new PerformInitializeTask(backupManagerService,
                        pendingInits, null);
                            transports, null);

                    // Acquire the wakelock and pass it to the init thread.  it will
                    // be released once init concludes.
                    backupManagerService.clearPendingInits();
                    backupManagerService.getWakelock().acquire();
                    backupManagerService.getBackupHandler().post(initTask);
                }
            }
        }
    }
}