diff options
author | haitaol@chromium.org <haitaol@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-05-29 06:50:45 +0000 |
---|---|---|
committer | haitaol@chromium.org <haitaol@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-05-29 06:50:45 +0000 |
commit | a3cdfcfd2e526d6a6650ba790b6b8763ae9aadad (patch) | |
tree | 4c4b68b646b62c8ff4781b56c2cf72a53c430744 /sync/test | |
parent | a1f34c689182824d6b8d4f87e1f9eb44092dd2b9 (diff) | |
download | chromium_src-a3cdfcfd2e526d6a6650ba790b6b8763ae9aadad.zip chromium_src-a3cdfcfd2e526d6a6650ba790b6b8763ae9aadad.tar.gz chromium_src-a3cdfcfd2e526d6a6650ba790b6b8763ae9aadad.tar.bz2 |
Worker changes to prepare for lock-free shutdown.
* Make worker observe the destruction of the thread where it does work.
* Make work done signal a memeber of worker and set it when worker's working
thread is destroyed so that syncer won't be blocked indefinitely on work
that's not gonna run.
* Ref-count worker in session context so that worker remains valid when syncer
is still iterating through workers but registrar has erased it from its worker map.
* Add RequestStop() and Stopped() to allow worker to return early when it's
stopped while waiting to run work on its working thread.
This cl by itself should have no real impact because the added functions are not used.
BUG=19757
Review URL: https://chromiumcodereview.appspot.com/14046031
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@202786 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'sync/test')
-rw-r--r-- | sync/test/engine/fake_model_worker.cc | 10 | ||||
-rw-r--r-- | sync/test/engine/fake_model_worker.h | 7 |
2 files changed, 13 insertions, 4 deletions
diff --git a/sync/test/engine/fake_model_worker.cc b/sync/test/engine/fake_model_worker.cc index dba6fdd..80a58d4 100644 --- a/sync/test/engine/fake_model_worker.cc +++ b/sync/test/engine/fake_model_worker.cc @@ -6,7 +6,9 @@ namespace syncer { -FakeModelWorker::FakeModelWorker(ModelSafeGroup group) : group_(group) {} +FakeModelWorker::FakeModelWorker(ModelSafeGroup group) + : ModelSafeWorker(NULL), + group_(group) {} FakeModelWorker::~FakeModelWorker() { // We may need to relax this is FakeModelWorker is used in a @@ -16,7 +18,11 @@ FakeModelWorker::~FakeModelWorker() { DCHECK(CalledOnValidThread()); } -SyncerError FakeModelWorker::DoWorkAndWaitUntilDone( +void FakeModelWorker::RegisterForLoopDestruction() { + NOTREACHED(); +} + +SyncerError FakeModelWorker::DoWorkAndWaitUntilDoneImpl( const WorkCallback& work) { DCHECK(CalledOnValidThread()); // Simply do the work on the current thread. diff --git a/sync/test/engine/fake_model_worker.h b/sync/test/engine/fake_model_worker.h index 7b7bd4b..9c621be 100644 --- a/sync/test/engine/fake_model_worker.h +++ b/sync/test/engine/fake_model_worker.h @@ -22,10 +22,13 @@ class FakeModelWorker : public ModelSafeWorker, public base::NonThreadSafe { explicit FakeModelWorker(ModelSafeGroup group); // ModelSafeWorker implementation. - virtual SyncerError DoWorkAndWaitUntilDone( - const WorkCallback& work) OVERRIDE; + virtual void RegisterForLoopDestruction() OVERRIDE; virtual ModelSafeGroup GetModelSafeGroup() OVERRIDE; + protected: + virtual SyncerError DoWorkAndWaitUntilDoneImpl( + const WorkCallback& work) OVERRIDE; + private: virtual ~FakeModelWorker(); |