Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2542)

Unified Diff: chrome/browser/sync/glue/password_model_worker.cc

Issue 23463033: Release password store on UI loop when worker is stopped so that password (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/sync/glue/password_model_worker.cc
diff --git a/chrome/browser/sync/glue/password_model_worker.cc b/chrome/browser/sync/glue/password_model_worker.cc
index beaf5b15744f99bc7787ecdde1c40ba8db6cbe63..a01c0d9e5001e4ca40cf96d4a61bd90c4f327e9a 100644
--- a/chrome/browser/sync/glue/password_model_worker.cc
+++ b/chrome/browser/sync/glue/password_model_worker.cc
@@ -22,6 +22,7 @@ PasswordModelWorker::PasswordModelWorker(
}
void PasswordModelWorker::RegisterForLoopDestruction() {
+ base::AutoLock lock(password_store_lock_);
password_store_->ScheduleTask(
base::Bind(&PasswordModelWorker::RegisterForPasswordLoopDestruction,
this));
@@ -30,13 +31,22 @@ void PasswordModelWorker::RegisterForLoopDestruction() {
syncer::SyncerError PasswordModelWorker::DoWorkAndWaitUntilDoneImpl(
const syncer::WorkCallback& work) {
syncer::SyncerError error = syncer::UNSET;
- if (password_store_->ScheduleTask(
- base::Bind(&PasswordModelWorker::CallDoWorkAndSignalTask,
- this, work, work_done_or_stopped(), &error))) {
+
+ bool scheduled = false;
+ {
+ base::AutoLock lock(password_store_lock_);
+ if (!password_store_.get())
+ return syncer::CANNOT_DO_WORK;
+
+ scheduled = password_store_->ScheduleTask(
+ base::Bind(&PasswordModelWorker::CallDoWorkAndSignalTask,
+ this, work, work_done_or_stopped(), &error));
+ }
+
+ if (scheduled)
work_done_or_stopped()->Wait();
- } else {
+ else
error = syncer::CANNOT_DO_WORK;
- }
return error;
}
@@ -59,4 +69,11 @@ void PasswordModelWorker::RegisterForPasswordLoopDestruction() {
SetWorkingLoopToCurrent();
}
+void PasswordModelWorker::RequestStop() {
+ ModelSafeWorker::RequestStop();
+
+ base::AutoLock lock(password_store_lock_);
+ password_store_ = NULL;
+}
+
} // namespace browser_sync
« no previous file with comments | « chrome/browser/sync/glue/password_model_worker.h ('k') | sync/internal_api/public/engine/model_safe_worker.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698