Merge "Tear down agents properly at EOD in full restore" into lmp-dev
diff --git a/core/java/com/android/internal/backup/LocalTransport.java b/core/java/com/android/internal/backup/LocalTransport.java
index 7e58351..50e7bcf 100644
--- a/core/java/com/android/internal/backup/LocalTransport.java
+++ b/core/java/com/android/internal/backup/LocalTransport.java
@@ -271,6 +271,9 @@
                 mFullTargetPackage = null;
                 mSocket.close();
             } catch (IOException e) {
+                if (DEBUG) {
+                    Log.w(TAG, "Exception caught in finishBackup()", e);
+                }
                 return TRANSPORT_ERROR;
             } finally {
                 mSocket = null;
@@ -576,7 +579,7 @@
                 return TRANSPORT_PACKAGE_REJECTED;
             }
             mFullRestoreSocketStream = new FileOutputStream(socket.getFileDescriptor());
-            mFullRestoreBuffer = new byte[32*1024];
+            mFullRestoreBuffer = new byte[2*1024];
         }
 
         int nRead;
diff --git a/services/backup/java/com/android/server/backup/BackupManagerService.java b/services/backup/java/com/android/server/backup/BackupManagerService.java
index ce9e85e..17a5263 100644
--- a/services/backup/java/com/android/server/backup/BackupManagerService.java
+++ b/services/backup/java/com/android/server/backup/BackupManagerService.java
@@ -3539,6 +3539,11 @@
                             // In all cases we need to give the transport its finish callback
                             int finishResult = transport.finishBackup();
 
+                            if (MORE_DEBUG) {
+                                Slog.i(TAG, "Done trying to send backup data: result="
+                                        + result + " finishResult=" + finishResult);
+                            }
+
                             // If we were otherwise in a good state, now interpret the final
                             // result based on what finishBackup() returned.  If we're in a
                             // failure case already, preserve that result and ignore whatever
@@ -3561,7 +3566,7 @@
                             // do nothing, clean up, and continue looping
                         } else if (result != BackupTransport.TRANSPORT_OK) {
                             if (DEBUG) {
-                                Slog.i(TAG, "Transport failed; aborting backup");
+                                Slog.i(TAG, "Transport failed; aborting backup: " + result);
                                 return;
                             }
                         }
@@ -4083,6 +4088,9 @@
                             // okay, if the remote end failed at any point, deal with
                             // it by ignoring the rest of the restore on it
                             if (!agentSuccess) {
+                                if (DEBUG) {
+                                    Slog.i(TAG, "Agent failure; ending restore");
+                                }
                                 mBackupHandler.removeMessages(MSG_TIMEOUT);
                                 tearDownPipes();
                                 tearDownAgent(mTargetApp);
@@ -4124,6 +4132,11 @@
 
             // If we got here we're either running smoothly or we've finished
             if (info == null) {
+                if (MORE_DEBUG) {
+                    Slog.i(TAG, "No [more] data for this package; tearing down");
+                }
+                tearDownPipes();
+                tearDownAgent(mTargetApp);
                 setRunning(false);
             }
             return (info != null);
@@ -7064,6 +7077,10 @@
                     // Don't proceed until the engine has torn down the agent etc
                     eThread.waitForResult();
 
+                    if (MORE_DEBUG) {
+                        Slog.i(TAG, "engine thread finished; proceeding");
+                    }
+
                     // Now we're really done with this one too
                     IoUtils.closeQuietly(mEnginePipes[0]);