Don't unbind from the sync adapter before cancelSync().
- Also remove the unused method from ISyncAdapter.aidl
Bug: 63773598
Test: Manual test
Change-Id: Ifb2fc520759e83ad961032f9e217100e038e1a8c
diff --git a/services/core/java/com/android/server/content/SyncLogger.java b/services/core/java/com/android/server/content/SyncLogger.java
index db79464..d93bdc9 100644
--- a/services/core/java/com/android/server/content/SyncLogger.java
+++ b/services/core/java/com/android/server/content/SyncLogger.java
@@ -22,6 +22,7 @@
import android.os.FileUtils;
import android.os.SystemProperties;
import android.text.format.DateUtils;
+import android.util.Log;
import android.util.Slog;
import com.android.internal.annotations.GuardedBy;
@@ -127,6 +128,8 @@
@GuardedBy("mLock")
private boolean mErrorShown;
+ private static final boolean DO_LOGCAT = Log.isLoggable(TAG, Log.DEBUG);
+
RotatingFileLogger() {
mLogPath = new File(Environment.getDataSystemDirectory(), "syncmanager-log");
}
@@ -158,6 +161,8 @@
mStringBuilder.append(android.os.Process.myTid());
mStringBuilder.append(' ');
+ final int messageStart = mStringBuilder.length();
+
for (Object o : message) {
mStringBuilder.append(o);
}
@@ -166,6 +171,11 @@
try {
mLogWriter.append(mStringBuilder);
mLogWriter.flush();
+
+ // Also write on logcat.
+ if (DO_LOGCAT) {
+ Log.d(TAG, mStringBuilder.substring(messageStart));
+ }
} catch (IOException e) {
handleException("Failed to write log", e);
}
diff --git a/services/core/java/com/android/server/content/SyncManager.java b/services/core/java/com/android/server/content/SyncManager.java
index c250005..3e05d50 100644
--- a/services/core/java/com/android/server/content/SyncManager.java
+++ b/services/core/java/com/android/server/content/SyncManager.java
@@ -1704,6 +1704,8 @@
// Include "this" in the message so that the handler can ignore it if this
// ActiveSyncContext is no longer the mActiveSyncContext at message handling
// time.
+ mLogger.log("onFinished result=", result, " endpoint=",
+ (mSyncOperation == null ? "null" : mSyncOperation.target));
sendSyncFinishedOrCanceledMessage(this, result);
}
@@ -1745,6 +1747,7 @@
Context.BIND_AUTO_CREATE | Context.BIND_NOT_FOREGROUND
| Context.BIND_ALLOW_OOM_MANAGEMENT,
new UserHandle(mSyncOperation.target.userId));
+ mLogger.log("bindService() returned=", mBound, " for ", this);
if (!bindResult) {
mBound = false;
} else {
@@ -1767,6 +1770,7 @@
}
if (mBound) {
mBound = false;
+ mLogger.log("unbindService for ", this);
mContext.unbindService(this);
try {
mBatteryStats.noteSyncFinish(mEventName, mSyncAdapterUid);
@@ -2729,9 +2733,14 @@
// outstanding
try {
if (currentSyncContext.mSyncAdapter != null) {
+ mLogger.log("Calling cancelSync for SERVICE_DISCONNECTED ",
+ currentSyncContext,
+ " adapter=", currentSyncContext.mSyncAdapter);
currentSyncContext.mSyncAdapter.cancelSync(currentSyncContext);
+ mLogger.log("Canceled");
}
} catch (RemoteException e) {
+ mLogger.log("RemoteException ", Log.getStackTraceString(e));
// We don't need to retry this in this case.
}
@@ -3217,14 +3226,15 @@
mLogger.log("Sync start: account=" + syncOperation.target.account,
" authority=", syncOperation.target.provider,
" reason=", SyncOperation.reasonToString(null, syncOperation.reason),
- " extras=", SyncOperation.extrasToString(syncOperation.extras));
+ " extras=", SyncOperation.extrasToString(syncOperation.extras),
+ " adapter=", activeSyncContext.mSyncAdapter);
activeSyncContext.mSyncAdapter = ISyncAdapter.Stub.asInterface(syncAdapter);
activeSyncContext.mSyncAdapter
.startSync(activeSyncContext, syncOperation.target.provider,
syncOperation.target.account, syncOperation.extras);
- mLogger.log("Sync finish");
+ mLogger.log("Sync is running now...");
} catch (RemoteException remoteExc) {
mLogger.log("Sync failed with RemoteException: ", remoteExc.toString());
Log.d(TAG, "maybeStartNextSync: caught a RemoteException, rescheduling", remoteExc);
@@ -3297,7 +3307,6 @@
activeSyncContext.mSyncAdapter.asBinder().unlinkToDeath(activeSyncContext, 0);
activeSyncContext.mIsLinkedToDeath = false;
}
- closeActiveSyncContext(activeSyncContext);
final long elapsedTime = SystemClock.elapsedRealtime() - activeSyncContext.mStartTime;
String historyMessage;
int downstreamActivity;
@@ -3355,8 +3364,12 @@
}
if (activeSyncContext.mSyncAdapter != null) {
try {
+ mLogger.log("Calling cancelSync for runSyncFinishedOrCanceled ",
+ activeSyncContext, " adapter=", activeSyncContext.mSyncAdapter);
activeSyncContext.mSyncAdapter.cancelSync(activeSyncContext);
+ mLogger.log("Canceled");
} catch (RemoteException e) {
+ mLogger.log("RemoteException ", Log.getStackTraceString(e));
// we don't need to retry this in this case
}
}
@@ -3365,6 +3378,9 @@
upstreamActivity = 0;
}
+ // Close and unbind the service. Don't use activeSyncContext.mSyncAdapter after this.
+ closeActiveSyncContext(activeSyncContext);
+
stopSyncEvent(activeSyncContext.mHistoryRowId, syncOperation, historyMessage,
upstreamActivity, downstreamActivity, elapsedTime);
// Check for full-resync and schedule it after closing off the last sync.