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

Commit 9c4125e2 authored by Android (Google) Code Review's avatar Android (Google) Code Review Committed by The Android Open Source Project
Browse files

am 54de9063: Merge change 3243 into donut

Merge commit '54de9063'

* commit '54de9063':
  Fix backup agent unbind
parents 49f37221 54de9063
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -350,6 +350,14 @@ public abstract class ApplicationThreadNative extends Binder
            scheduleCreateBackupAgent(appInfo, backupMode);
            return true;
        }

        case SCHEDULE_DESTROY_BACKUP_AGENT_TRANSACTION:
        {
            data.enforceInterface(IApplicationThread.descriptor);
            ApplicationInfo appInfo = ApplicationInfo.CREATOR.createFromParcel(data);
            scheduleDestroyBackupAgent(appInfo);
            return true;
        }
        }

        return super.onTransact(code, data, reply, flags);
+1 −40
Original line number Diff line number Diff line
@@ -197,7 +197,6 @@ class BackupManagerService extends IBackupManager.Stub {
                    // WARNING: If we crash after this line, anything in mPendingBackups will
                    // be lost.  FIX THIS.
                }
                //startOneAgent();
                (new PerformBackupThread(mTransportId, mBackupQueue)).run();
                break;

@@ -207,45 +206,6 @@ class BackupManagerService extends IBackupManager.Stub {
        }
    }

    void startOneAgent() {
        // Loop until we find someone to start or the queue empties out.
        while (true) {
            BackupRequest request;
            synchronized (mQueueLock) {
                int queueSize = mBackupQueue.size();
                Log.d(TAG, "mBackupQueue.size=" + queueSize);
                if (queueSize == 0) {
                    mBackupQueue = null;
                    // if there are pending backups, start those after a short delay
                    if (mPendingBackups.size() > 0) {
                        mBackupHandler.sendEmptyMessageDelayed(MSG_RUN_BACKUP, COLLECTION_INTERVAL);
                    }
                    return;
                }
                request = mBackupQueue.get(0);
                // Take it off the queue when we're done.
            }
            
            Log.d(TAG, "starting agent for " + request);
            // !!! TODO: need to handle the restore case?
            int mode = (request.fullBackup)
                    ? IApplicationThread.BACKUP_MODE_FULL
                    : IApplicationThread.BACKUP_MODE_INCREMENTAL;
            try {
                if (mActivityManager.bindBackupAgent(request.appInfo, mode)) {
                    Log.d(TAG, "awaiting agent for " + request);
                    // success
                    return;
                }
            } catch (RemoteException e) {
                // can't happen; activity manager is local
            } catch (SecurityException ex) {
                // Try for the next one.
                Log.d(TAG, "error in bind", ex);
            }
        }
    }

    void processOneBackup(BackupRequest request, IBackupAgent agent, IBackupTransport transport) {
        final String packageName = request.appInfo.packageName;
        Log.d(TAG, "processOneBackup doBackup() on " + packageName);
@@ -290,6 +250,7 @@ class BackupManagerService extends IBackupManager.Stub {

            // Now propagate the newly-backed-up data to the transport
            if (success) {
                if (DEBUG) Log.v(TAG, "doBackup() success; calling transport");
                backupData =
                    ParcelFileDescriptor.open(backupDataName, ParcelFileDescriptor.MODE_READ_ONLY);
                int error = transport.performBackup(packageName, backupData);