From 119aac93f8d757ff464dd4d1135ffcf37f7cda02 Mon Sep 17 00:00:00 2001 From: Matthew Williams Date: Sun, 28 Sep 2014 20:42:23 -0700 Subject: [PATCH] Fix deadlock caused by clearAllBackoffs in SSE BUG: 17420163 This CL is a copy of ag/359292 That commit was lost, see the bug for more details. Change-Id: I68747d447f8c95e6b5022f9bc8cbab677e0c3d4e --- .../core/java/com/android/server/content/SyncManager.java | 4 +++- .../java/com/android/server/content/SyncStorageEngine.java | 6 ++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/services/core/java/com/android/server/content/SyncManager.java b/services/core/java/com/android/server/content/SyncManager.java index 9292d459b02a4..adc96f74e4ddf 100644 --- a/services/core/java/com/android/server/content/SyncManager.java +++ b/services/core/java/com/android/server/content/SyncManager.java @@ -311,7 +311,9 @@ public class SyncManager { if (Log.isLoggable(TAG, Log.VERBOSE)) { Log.v(TAG, "Reconnection detected: clearing all backoffs"); } - mSyncStorageEngine.clearAllBackoffs(mSyncQueue); + synchronized (mSyncQueue) { + mSyncStorageEngine.clearAllBackoffsLocked(mSyncQueue); + } } sendCheckAlarmsMessage(); } diff --git a/services/core/java/com/android/server/content/SyncStorageEngine.java b/services/core/java/com/android/server/content/SyncStorageEngine.java index 94993707b69a1..0d5f240daaee7 100644 --- a/services/core/java/com/android/server/content/SyncStorageEngine.java +++ b/services/core/java/com/android/server/content/SyncStorageEngine.java @@ -834,17 +834,16 @@ public class SyncStorageEngine extends Handler { return changed; } - public void clearAllBackoffs(SyncQueue syncQueue) { + public void clearAllBackoffsLocked(SyncQueue syncQueue) { boolean changed = false; synchronized (mAuthorities) { - synchronized (syncQueue) { // Clear backoff for all sync adapters. for (AccountInfo accountInfo : mAccounts.values()) { for (AuthorityInfo authorityInfo : accountInfo.authorities.values()) { if (authorityInfo.backoffTime != NOT_IN_BACKOFF_MODE || authorityInfo.backoffDelay != NOT_IN_BACKOFF_MODE) { if (Log.isLoggable(TAG, Log.VERBOSE)) { - Log.v(TAG, "clearAllBackoffs:" + Log.v(TAG, "clearAllBackoffsLocked:" + " authority:" + authorityInfo.target + " account:" + accountInfo.accountAndUser.account.name + " user:" + accountInfo.accountAndUser.userId @@ -868,7 +867,6 @@ public class SyncStorageEngine extends Handler { authorityInfo.backoffDelay = NOT_IN_BACKOFF_MODE; } } - } syncQueue.clearBackoffs(); } }