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

Unified Diff: components/sync/engine/model_safe_worker.cc

Issue 2480203002: ui: Cleanup class/struct forward declarations (Closed)
Patch Set: Sync CL to position 430550 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
« no previous file with comments | « components/sync/engine/model_safe_worker.h ('k') | components/sync/engine/passive_model_worker.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/sync/engine/model_safe_worker.cc
diff --git a/components/sync/engine/model_safe_worker.cc b/components/sync/engine/model_safe_worker.cc
index 6f41366bd1859816445d092b9ce5ea3b0b57e0be..530f206599673cf1b91239e5d40aeff463b0406c 100644
--- a/components/sync/engine/model_safe_worker.cc
+++ b/components/sync/engine/model_safe_worker.cc
@@ -4,9 +4,7 @@
#include "components/sync/engine/model_safe_worker.h"
-#include "base/bind.h"
#include "base/json/json_writer.h"
-#include "base/threading/thread_task_runner_handle.h"
#include "base/values.h"
namespace syncer {
@@ -71,116 +69,24 @@ std::string ModelSafeGroupToString(ModelSafeGroup group) {
}
}
-ModelSafeWorker::ModelSafeWorker(WorkerLoopDestructionObserver* observer)
- : stopped_(false),
- observer_(observer) {}
-
+ModelSafeWorker::ModelSafeWorker() {}
ModelSafeWorker::~ModelSafeWorker() {}
void ModelSafeWorker::RequestStop() {
- base::AutoLock al(stopped_lock_);
-
// Set stop flag. This prevents any *further* tasks from being posted to
// worker threads (see DoWorkAndWaitUntilDone below), but note that one may
// already be posted.
- stopped_ = true;
+ stopped_.Set();
}
SyncerError ModelSafeWorker::DoWorkAndWaitUntilDone(const WorkCallback& work) {
- {
- base::AutoLock al(stopped_lock_);
- if (stopped_)
- return CANNOT_DO_WORK;
- }
-
+ if (stopped_.IsSet())
+ return CANNOT_DO_WORK;
return DoWorkAndWaitUntilDoneImpl(work);
}
bool ModelSafeWorker::IsStopped() {
- base::AutoLock al(stopped_lock_);
- return stopped_;
-}
-
-void ModelSafeWorker::WillDestroyCurrentMessageLoop() {
- {
- base::AutoLock al(stopped_lock_);
- stopped_ = true;
-
- DVLOG(1) << ModelSafeGroupToString(GetModelSafeGroup())
- << " worker stops on destruction of its working thread.";
- }
-
- {
- base::AutoLock l(working_task_runner_lock_);
- working_task_runner_ = nullptr;
- }
-
- if (observer_)
- observer_->OnWorkerLoopDestroyed(GetModelSafeGroup());
-}
-
-void ModelSafeWorker::SetWorkingLoopToCurrent() {
- base::Callback<void(ModelSafeGroup)> unregister_done_callback;
-
- {
- base::AutoLock l(working_task_runner_lock_);
- DCHECK(!working_task_runner_);
-
- if (unregister_done_callback_.is_null()) {
- // Expected case - UnregisterForLoopDestruction hasn't been called yet.
- base::MessageLoop::current()->AddDestructionObserver(this);
- working_task_runner_ = base::ThreadTaskRunnerHandle::Get();
- } else {
- // Rare case which is possible when the model type thread remains
- // blocked for the entire session and UnregisterForLoopDestruction ends
- // up being called before this method. This method is posted unlike
- // UnregisterForLoopDestruction - that's why they can end up being called
- // out of order.
- // In this case we skip the destruction observer registration
- // and just invoke the callback stored at UnregisterForLoopDestruction.
- DCHECK(stopped_);
- unregister_done_callback = unregister_done_callback_;
- unregister_done_callback_.Reset();
- }
- }
-
- if (!unregister_done_callback.is_null()) {
- unregister_done_callback.Run(GetModelSafeGroup());
- }
-}
-
-void ModelSafeWorker::UnregisterForLoopDestruction(
- base::Callback<void(ModelSafeGroup)> unregister_done_callback) {
- base::AutoLock l(working_task_runner_lock_);
- if (working_task_runner_) {
- // Normal case - observer registration has been already done.
- // Delegate to the sync thread to do the actual unregistration in
- // UnregisterForLoopDestructionAsync.
- DCHECK(!working_task_runner_->BelongsToCurrentThread());
- working_task_runner_->PostTask(
- FROM_HERE,
- base::Bind(&ModelSafeWorker::UnregisterForLoopDestructionAsync, this,
- unregister_done_callback));
- } else {
- // The working loop is still unknown, probably because the model type
- // thread is blocked. Store the callback to be called from
- // SetWorkingLoopToCurrent.
- unregister_done_callback_ = unregister_done_callback;
- }
-}
-
-void ModelSafeWorker::UnregisterForLoopDestructionAsync(
- base::Callback<void(ModelSafeGroup)> unregister_done_callback) {
- {
- base::AutoLock l(working_task_runner_lock_);
- if (!working_task_runner_)
- return;
- DCHECK(working_task_runner_->BelongsToCurrentThread());
- }
-
- DCHECK(stopped_);
- base::MessageLoop::current()->RemoveDestructionObserver(this);
- unregister_done_callback.Run(GetModelSafeGroup());
+ return stopped_.IsSet();
}
} // namespace syncer
« no previous file with comments | « components/sync/engine/model_safe_worker.h ('k') | components/sync/engine/passive_model_worker.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698