summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Matthew Williams <mjwilliams@google.com> 2014-09-28 20:42:23 -0700
committer Matthew Williams <mjwilliams@google.com> 2014-09-28 20:42:23 -0700
commit119aac93f8d757ff464dd4d1135ffcf37f7cda02 (patch)
treedc48fde756aaa5d09100a554495f449ec24556ca
parent485f2095f8ba695b88331c01a2de468b5616a5d7 (diff)
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
-rw-r--r--services/core/java/com/android/server/content/SyncManager.java4
-rw-r--r--services/core/java/com/android/server/content/SyncStorageEngine.java6
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 9292d459b02a..adc96f74e4dd 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 94993707b69a..0d5f240daaee 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();
}
}