am ff0c1f63: Merge change Ic2d782c1 into eclair-mr2

Merge commit 'ff0c1f631348f0cdfa6733b37e2a65202a434923' into eclair-mr2-plus-aosp

* commit 'ff0c1f631348f0cdfa6733b37e2a65202a434923':
  Add checks to prevent duplicate service starts (fixes #2099830)
This commit is contained in:
Marc Blank 2009-10-08 08:16:56 -07:00 committed by Android Git Automerger
commit f9191a955a

View File

@ -1285,13 +1285,16 @@ public class SyncManager extends Service implements Runnable {
synchronized (sSyncToken) {
Account acct = Account.restoreAccountWithId(this, m.mAccountKey);
if (acct != null) {
AbstractSyncService service;
service = new EasSyncService(this, m);
service.mSyncReason = reason;
if (req != null) {
service.addPartRequest(req);
// 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.mSyncReason = reason;
if (req != null) {
service.addPartRequest(req);
}
startService(service, m);
}
startService(service, m);
}
}
}
@ -1480,18 +1483,18 @@ public class SyncManager extends Service implements Runnable {
deletedMailboxes.add(mailboxId);
}
}
}
// If so, stop them or remove them from the map
for (Long mailboxId: deletedMailboxes) {
AbstractSyncService svc = mServiceMap.get(mailboxId);
if (svc != null) {
boolean alive = svc.mThread.isAlive();
log("Deleted mailbox: " + svc.mMailboxName);
if (alive) {
stopManualSync(mailboxId);
} else {
log("Removing from serviceMap");
releaseMailbox(mailboxId);
// If so, stop them or remove them from the map
for (Long mailboxId: deletedMailboxes) {
AbstractSyncService svc = mServiceMap.get(mailboxId);
if (svc != null) {
boolean alive = svc.mThread.isAlive();
log("Deleted mailbox: " + svc.mMailboxName);
if (alive) {
stopManualSync(mailboxId);
} else {
log("Removing from serviceMap");
releaseMailbox(mailboxId);
}
}
}
}
@ -1507,7 +1510,10 @@ public class SyncManager extends Service implements Runnable {
try {
while (c.moveToNext()) {
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) {
// Check whether we're in a hold (temporary or permanent)
SyncError syncError = mSyncErrorMap.get(mid);