Add checks to prevent duplicate service starts (fixes #2099830)

Change-Id: Ic2d782c1b36459212f7f3441202220353eccd776
This commit is contained in:
Marc Blank 2009-10-07 09:49:21 -07:00
parent df002ccfac
commit 572f6058f4

View File

@ -1285,7 +1285,9 @@ public class SyncManager extends Service implements Runnable {
synchronized (sSyncToken) { synchronized (sSyncToken) {
Account acct = Account.restoreAccountWithId(this, m.mAccountKey); Account acct = Account.restoreAccountWithId(this, m.mAccountKey);
if (acct != null) { if (acct != null) {
AbstractSyncService service; // Always make sure there's not a running instance of this service
AbstractSyncService service = mServiceMap.get(m.mId);
if (service == null) {
service = new EasSyncService(this, m); service = new EasSyncService(this, m);
service.mSyncReason = reason; service.mSyncReason = reason;
if (req != null) { if (req != null) {
@ -1295,6 +1297,7 @@ public class SyncManager extends Service implements Runnable {
} }
} }
} }
}
private void stopServices() { private void stopServices() {
synchronized (sSyncToken) { synchronized (sSyncToken) {
@ -1480,7 +1483,6 @@ public class SyncManager extends Service implements Runnable {
deletedMailboxes.add(mailboxId); deletedMailboxes.add(mailboxId);
} }
} }
}
// If so, stop them or remove them from the map // If so, stop them or remove them from the map
for (Long mailboxId: deletedMailboxes) { for (Long mailboxId: deletedMailboxes) {
AbstractSyncService svc = mServiceMap.get(mailboxId); AbstractSyncService svc = mServiceMap.get(mailboxId);
@ -1495,6 +1497,7 @@ public class SyncManager extends Service implements Runnable {
} }
} }
} }
}
long nextWait = SYNC_MANAGER_HEARTBEAT_TIME; long nextWait = SYNC_MANAGER_HEARTBEAT_TIME;
long now = System.currentTimeMillis(); long now = System.currentTimeMillis();
@ -1507,7 +1510,10 @@ public class SyncManager extends Service implements Runnable {
try { try {
while (c.moveToNext()) { while (c.moveToNext()) {
long mid = c.getLong(Mailbox.CONTENT_ID_COLUMN); long mid = c.getLong(Mailbox.CONTENT_ID_COLUMN);
AbstractSyncService service = mServiceMap.get(mid); AbstractSyncService service = null;
synchronized (sSyncToken) {
service = mServiceMap.get(mid);
}
if (service == null) { if (service == null) {
// Check whether we're in a hold (temporary or permanent) // Check whether we're in a hold (temporary or permanent)
SyncError syncError = mSyncErrorMap.get(mid); SyncError syncError = mSyncErrorMap.get(mid);