summaryrefslogtreecommitdiffstats
path: root/sync/test
diff options
context:
space:
mode:
authorhaitaol@chromium.org <haitaol@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-05-29 06:50:45 +0000
committerhaitaol@chromium.org <haitaol@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-05-29 06:50:45 +0000
commita3cdfcfd2e526d6a6650ba790b6b8763ae9aadad (patch)
tree4c4b68b646b62c8ff4781b56c2cf72a53c430744 /sync/test
parenta1f34c689182824d6b8d4f87e1f9eb44092dd2b9 (diff)
downloadchromium_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.cc10
-rw-r--r--sync/test/engine/fake_model_worker.h7
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();