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

Commit 1885b379 authored by Christopher Tate's avatar Christopher Tate
Browse files

Fix backup agent unbind

The handwritten binder transaction passing wasn't propagating the agent-destroy
transaction to the client side.  Oops.

Also, remove obsolete run-one-agent code from the backup manager service.
parent b640da8f
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);