Index: chrome/browser/sync/glue/frontend_data_type_controller.cc |
diff --git a/chrome/browser/sync/glue/frontend_data_type_controller.cc b/chrome/browser/sync/glue/frontend_data_type_controller.cc |
index 770e5c31b4129e28e3ead78528aa14d9bf13138f..e686024334dfcfe872872725474a35493db8d0dc 100644 |
--- a/chrome/browser/sync/glue/frontend_data_type_controller.cc |
+++ b/chrome/browser/sync/glue/frontend_data_type_controller.cc |
@@ -195,7 +195,14 @@ void FrontendDataTypeController::OnUnrecoverableError( |
const tracked_objects::Location& from_here, const std::string& message) { |
// The ProfileSyncService will invoke our Stop() method in response to this. |
RecordUnrecoverableError(from_here, message); |
- sync_service_->OnUnrecoverableError(from_here, message); |
+ |
+ // We dont know the current state of the caller. Posting a task will allow |
+ // the caller to unwind the stack before we process unrecoverable error. |
+ MessageLoop::current()->PostTask(from_here, |
+ base::Bind(&ProfileSyncService::OnUnrecoverableError, |
+ sync_service_->AsWeakPtr(), |
+ from_here, |
+ message)); |
} |
AssociatorInterface* FrontendDataTypeController::model_associator() const { |