OSDN Git Service

Fix backup agent unbind
authorChristopher Tate <ctate@google.com>
Thu, 4 Jun 2009 22:00:33 +0000 (15:00 -0700)
committerChristopher Tate <ctate@google.com>
Thu, 4 Jun 2009 22:02:37 +0000 (15:02 -0700)
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.

core/java/android/app/ApplicationThreadNative.java
services/java/com/android/server/BackupManagerService.java

index e28fd0f..6750d12 100644 (file)
@@ -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);
index b003e76..5770a77 100644 (file)
@@ -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);