| Index: chrome/browser/sync/glue/sync_backend_host.cc
|
| diff --git a/chrome/browser/sync/glue/sync_backend_host.cc b/chrome/browser/sync/glue/sync_backend_host.cc
|
| index 295bb8c5f7ea6b4d89007e75e9ce6f0fe54bda97..31951e15220580b8d59aa1cf914e1047bf1c047b 100644
|
| --- a/chrome/browser/sync/glue/sync_backend_host.cc
|
| +++ b/chrome/browser/sync/glue/sync_backend_host.cc
|
| @@ -846,6 +846,13 @@ void SyncBackendHost::Core::OnInitializationComplete(
|
| bool success,
|
| const syncer::ModelTypeSet restored_types) {
|
| DCHECK_EQ(MessageLoop::current(), sync_loop_);
|
| +
|
| + if (!success) {
|
| + sync_manager_->RemoveObserver(this);
|
| + sync_manager_->ShutdownOnSyncThread();
|
| + sync_manager_.reset();
|
| + }
|
| +
|
| host_.Call(
|
| FROM_HERE,
|
| &SyncBackendHost::HandleSyncManagerInitializationOnFrontendLoop,
|
| @@ -1051,19 +1058,22 @@ void SyncBackendHost::Core::DoRefreshNigori(
|
|
|
| void SyncBackendHost::Core::DoStopSyncManagerForShutdown(
|
| const base::Closure& closure) {
|
| - DCHECK(sync_manager_.get());
|
| - sync_manager_->StopSyncingForShutdown(closure);
|
| + if (sync_manager_.get()) {
|
| + sync_manager_->StopSyncingForShutdown(closure);
|
| + } else {
|
| + sync_loop_->PostTask(FROM_HERE, closure);
|
| + }
|
| }
|
|
|
| void SyncBackendHost::Core::DoShutdown(bool sync_disabled) {
|
| DCHECK_EQ(MessageLoop::current(), sync_loop_);
|
| - if (!sync_manager_.get())
|
| - return;
|
| + if (sync_manager_.get()) {
|
| + save_changes_timer_.reset();
|
| + sync_manager_->ShutdownOnSyncThread();
|
| + sync_manager_->RemoveObserver(this);
|
| + sync_manager_.reset();
|
| + }
|
|
|
| - save_changes_timer_.reset();
|
| - sync_manager_->ShutdownOnSyncThread();
|
| - sync_manager_->RemoveObserver(this);
|
| - sync_manager_.reset();
|
| chrome_sync_notification_bridge_ = NULL;
|
| registrar_ = NULL;
|
|
|
|
|