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

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

Issue 2466313003: Remove ModelSafeWorker::work_done_or_stopped(). (Closed)
Patch Set: CR zea #11 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..4f247fd02a2f47f472a4448fb232809b41cd411d 100644
--- a/components/sync/driver/glue/browser_thread_model_worker.cc
+++ b/components/sync/driver/glue/browser_thread_model_worker.cc
@@ -9,7 +9,6 @@
#include "base/synchronization/waitable_event.h"
using base::SingleThreadTaskRunner;
-using base::WaitableEvent;
namespace syncer {
@@ -27,15 +26,23 @@ SyncerError BrowserThreadModelWorker::DoWorkAndWaitUntilDoneImpl(
return work.Run();
}
+ // Signaled when the task is deleted, i.e. after it runs or when it is
+ // abandoned.
+ base::WaitableEvent work_done_or_abandoned(
+ 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))) {
+ base::Bind(
+ &BrowserThreadModelWorker::CallDoWorkAndSignalTask, this, work,
+ base::Passed(syncer::ScopedEventSignal(&work_done_or_abandoned)),
+ &error))) {
DLOG(WARNING) << "Failed to post task to runner " << runner_;
error = CANNOT_DO_WORK;
return error;
}
- work_done_or_stopped()->Wait();
+ work_done_or_abandoned.Wait();
return error;
}
@@ -55,13 +62,14 @@ void BrowserThreadModelWorker::RegisterForLoopDestruction() {
}
}
-void BrowserThreadModelWorker::CallDoWorkAndSignalTask(const WorkCallback& work,
- WaitableEvent* done,
- SyncerError* error) {
+void BrowserThreadModelWorker::CallDoWorkAndSignalTask(
+ const WorkCallback& work,
+ syncer::ScopedEventSignal scoped_event_signal,
+ SyncerError* error) {
DCHECK(runner_->BelongsToCurrentThread());
if (!IsStopped())
*error = work.Run();
- done->Signal();
+ // The event in |scoped_event_signal| is signaled at the end of this scope.
}
} // namespace syncer
« no previous file with comments | « components/sync/driver/glue/browser_thread_model_worker.h ('k') | components/sync/driver/glue/ui_model_worker.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698