Index: components/sync/driver/glue/ui_model_worker.cc |
diff --git a/components/sync/driver/glue/ui_model_worker.cc b/components/sync/driver/glue/ui_model_worker.cc |
index c812f9a9b54ed6b95cf0c974a3d07f778f2eac48..6afb5c78d6bfbaeb4f1da7e52d5ed0c9477f1151 100644 |
--- a/components/sync/driver/glue/ui_model_worker.cc |
+++ b/components/sync/driver/glue/ui_model_worker.cc |
@@ -9,7 +9,6 @@ |
#include "base/bind.h" |
#include "base/bind_helpers.h" |
#include "base/callback.h" |
-#include "base/synchronization/waitable_event.h" |
#include "components/sync/base/scoped_event_signal.h" |
namespace syncer { |
@@ -26,8 +25,11 @@ void CallDoWorkAndSignalEvent(const WorkCallback& work, |
} // namespace |
UIModelWorker::UIModelWorker( |
- scoped_refptr<base::SingleThreadTaskRunner> ui_thread) |
- : ui_thread_(std::move(ui_thread)) {} |
+ const scoped_refptr<base::SingleThreadTaskRunner>& ui_thread) |
fdoray
2016/11/11 15:40:28
Pass scoped_refptr by value https://chromium.googl
maxbogue
2016/11/12 03:19:52
Huh. We do that wrong all over sync code apparentl
|
+ : ui_thread_(ui_thread), |
+ work_done_or_abandoned_(base::WaitableEvent::ResetPolicy::AUTOMATIC, |
fdoray
2016/11/11 15:40:28
Should be base::WaitableEvent::ResetPolicy::MANUAL
maxbogue
2016/11/12 03:19:52
Sorta right but for the wrong reason. Needs to be
|
+ base::WaitableEvent::InitialState::NOT_SIGNALED) { |
+} |
SyncerError UIModelWorker::DoWorkAndWaitUntilDoneImpl( |
const WorkCallback& work) { |
@@ -38,26 +40,25 @@ SyncerError UIModelWorker::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 (!ui_thread_->PostTask(FROM_HERE, |
base::Bind(&CallDoWorkAndSignalEvent, work, |
base::Passed(syncer::ScopedEventSignal( |
- &work_done_or_abandoned)), |
+ &work_done_or_abandoned_)), |
&error_info))) { |
DLOG(WARNING) << "Could not post work to UI loop."; |
error_info = CANNOT_DO_WORK; |
return error_info; |
} |
- work_done_or_abandoned.Wait(); |
+ work_done_or_abandoned_.Wait(); |
return error_info; |
} |
+void UIModelWorker::RequestStop() { |
+ ModelSafeWorker::RequestStop(); |
+ work_done_or_abandoned_.Signal(); |
fdoray
2016/11/11 15:40:28
In sync_integration_tests, this is called before t
maxbogue
2016/11/12 03:19:52
Done.
|
+} |
+ |
ModelSafeGroup UIModelWorker::GetModelSafeGroup() { |
return GROUP_UI; |
} |