From d5f70b748351eb82a5f3567e2a1edea2de458951 Mon Sep 17 00:00:00 2001 From: Christopher Tate Date: Tue, 22 Mar 2016 15:27:54 -0700 Subject: [PATCH] Clean up a couple of bugs about transport init staging Using the right names for things typically works better. Bug 27794697 Change-Id: Ic8c3c2c978536545bd669c1c12aad9ee6783f38a --- .../internal/backup/LocalTransport.java | 1 - .../server/backup/BackupManagerService.java | 31 +++++++++++++++++-- 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/core/java/com/android/internal/backup/LocalTransport.java b/core/java/com/android/internal/backup/LocalTransport.java index 10027b6a723a1..5e8f4a2508160 100644 --- a/core/java/com/android/internal/backup/LocalTransport.java +++ b/core/java/com/android/internal/backup/LocalTransport.java @@ -27,7 +27,6 @@ import android.content.Intent; import android.content.pm.PackageInfo; import android.os.Environment; import android.os.ParcelFileDescriptor; -import android.os.SELinux; import android.system.ErrnoException; import android.system.Os; import android.system.StructStat; diff --git a/services/backup/java/com/android/server/backup/BackupManagerService.java b/services/backup/java/com/android/server/backup/BackupManagerService.java index b737ae2c3ee4b..e84f65b2ee654 100644 --- a/services/backup/java/com/android/server/backup/BackupManagerService.java +++ b/services/backup/java/com/android/server/backup/BackupManagerService.java @@ -1818,7 +1818,7 @@ public class BackupManagerService { File initSentinel = new File(stateDir, INIT_SENTINEL_FILE_NAME); if (initSentinel.exists()) { synchronized (mQueueLock) { - mPendingInits.add(transportName); + mPendingInits.add(name); // TODO: pick a better starting time than now + 1 minute long delay = 1000 * 60; // one minute, in milliseconds @@ -2316,6 +2316,25 @@ public class BackupManagerService { } } + // What name is this transport registered under...? + private String getTransportName(IBackupTransport transport) { + if (MORE_DEBUG) { + Slog.v(TAG, "Searching for transport name of " + transport); + } + synchronized (mTransports) { + final int N = mTransports.size(); + for (int i = 0; i < N; i++) { + if (mTransports.valueAt(i).equals(transport)) { + if (MORE_DEBUG) { + Slog.v(TAG, " Name found: " + mTransports.keyAt(i)); + } + return mTransports.keyAt(i); + } + } + } + return null; + } + // fire off a backup agent, blocking until it attaches or times out IBackupAgent bindToAgentSynchronous(ApplicationInfo app, int mode) { IBackupAgent agent = null; @@ -2921,7 +2940,15 @@ public class BackupManagerService { if (MORE_DEBUG) Slog.d(TAG, "Server requires init; rerunning"); addBackupTrace("init required; rerunning"); try { - mPendingInits.add(mTransport.transportDirName()); + final String name = getTransportName(mTransport); + if (name != null) { + mPendingInits.add(name); + } else { + if (DEBUG) { + Slog.w(TAG, "Couldn't find name of transport " + mTransport + + " for init"); + } + } } catch (Exception e) { Slog.w(TAG, "Failed to query transport name heading for init", e); // swallow it and proceed; we don't rely on this