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

Unified Diff: components/sync/driver/glue/browser_thread_model_worker.cc

Issue 2466313003: Remove ModelSafeWorker::work_done_or_stopped(). (Closed)
Patch Set: self-review Created 4 years, 1 month 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: components/sync/driver/glue/browser_thread_model_worker.cc
diff --git a/components/sync/driver/glue/browser_thread_model_worker.cc b/components/sync/driver/glue/browser_thread_model_worker.cc
index 2b77c03a4e4c45a6fb0c754179d414c4b4ffe775..e8245379fd677cf5d2e7ac6f1558fc5f9febae38 100644
--- a/components/sync/driver/glue/browser_thread_model_worker.cc
+++ b/components/sync/driver/glue/browser_thread_model_worker.cc
@@ -27,15 +27,23 @@ SyncerError BrowserThreadModelWorker::DoWorkAndWaitUntilDoneImpl(
return work.Run();
}
+ // Signaled when the task is deleted, i.e. after it runs or when it is
+ // abandonned.
+ base::WaitableEvent work_done_or_abandonned(
+ base::WaitableEvent::ResetPolicy::AUTOMATIC,
+ base::WaitableEvent::InitialState::NOT_SIGNALED);
+
if (!runner_->PostTask(
FROM_HERE,
base::Bind(&BrowserThreadModelWorker::CallDoWorkAndSignalTask, this,
- work, work_done_or_stopped(), &error))) {
+ work, base::Passed(syncer::SignalEventOnDelete(
+ &work_done_or_abandonned)),
+ &error))) {
DLOG(WARNING) << "Failed to post task to runner " << runner_;
error = CANNOT_DO_WORK;
return error;
}
- work_done_or_stopped()->Wait();
+ work_done_or_abandonned.Wait();
return error;
}
@@ -55,13 +63,14 @@ void BrowserThreadModelWorker::RegisterForLoopDestruction() {
}
}
-void BrowserThreadModelWorker::CallDoWorkAndSignalTask(const WorkCallback& work,
- WaitableEvent* done,
- SyncerError* error) {
+void BrowserThreadModelWorker::CallDoWorkAndSignalTask(
+ const WorkCallback& work,
+ syncer::SignalEventOnDelete signal_event_on_delete,
+ SyncerError* error) {
DCHECK(runner_->BelongsToCurrentThread());
if (!IsStopped())
*error = work.Run();
- done->Signal();
+ // The event in |signal_event_on_delete| is signaled at the end of this scope.
}
} // namespace syncer

Powered by Google App Engine
This is Rietveld 408576698