|
[Sync] Refactor ModelSafeWorker::DoWorkAndWaitUntilDone() to avoid code duplication.
Before this CL, logic to wait for a WorkCallback to run or be
abandoned was duplicated in multiple
ModelSafeWorker::DoWorkAndWaitUntilDoneImpl() implementations.
With this CL, ModelSafeWorker::DoWorkAndWaitUntilDoneImpl() is
replaced with ModelSafeWorker::ScheduleWork(). Implementations
are merely responsible for scheduling the callback that they
receive; they don't have to wait for it to run or be abandoned.
The logic to wait for the callback to run or be abandoned is moved
into ModelSafeWorker::DoWorkAndWaitUntilDone().
ModelSafeWorker::DoWorkAndWaitUntilDone() calls
ModelSafeWorker::ScheduleWork(). Then, it waits until either the
callback that it passed to ModelSafeWorker::ScheduleWork() is deleted
(may or may not have run) or ModelSafeWorker::RequestStop() is called
before the callback has started to run. Additionnaly, calling
ModelSafeWorker::RequestStop() transforms into no-op further
invocations of callbacks passed to ModelSafeWorker::ScheduleWork().
Unblocking ModelSafeWorker::DoWorkAndWaitUntilDone() when
ModelSafeWorker::RequestStop() is called is important to
prevent deadlocks in workers that schedule work on the UI
thread. Indeed, in Chrome, no tasks are scheduled on the UI
thread after ModelSafeWorker::RequestStop() is called and
pending UI tasks are not scheduled until after the sync thread
is joined.
BUG= 663600
Review-Url: https://codereview.chromium.org/2782573002
Cr-Original-Commit-Position: refs/heads/master@{#463413}
Committed: https://chromium.googlesource.com/chromium/src/+/316c08f3692150ac1c416c67391768622cc6a77f
Review-Url: https://codereview.chromium.org/2782573002
Cr-Commit-Position: refs/heads/master@{#465229}
Committed: https://chromium.googlesource.com/chromium/src/+/eeeb0d0ec28227aba875195e0f20076414fc4596
Total comments: 16
|
Unified diffs |
Side-by-side diffs |
Delta from patch set |
Stats (+559 lines, -483 lines) |
Patch |
|
M |
components/history/core/browser/BUILD.gn
|
View
|
1
2
3
4
5
6
7
8
9
|
1 chunk |
+1 line, -0 lines |
0 comments
|
Download
|
|
M |
components/history/core/browser/history_model_worker.h
|
View
|
1
2
3
4
5
6
7
8
9
|
1 chunk |
+2 lines, -4 lines |
0 comments
|
Download
|
|
M |
components/history/core/browser/history_model_worker.cc
|
View
|
1
2
3
4
5
6
7
8
9
|
5 chunks |
+17 lines, -72 lines |
0 comments
|
Download
|
|
A |
components/history/core/browser/history_model_worker_unittest.cc
|
View
|
1
2
3
4
5
6
7
8
9
10
|
1 chunk |
+227 lines, -0 lines |
0 comments
|
Download
|
|
M |
components/password_manager/sync/browser/password_model_worker.h
|
View
|
1
2
3
4
5
6
7
8
9
|
1 chunk |
+2 lines, -4 lines |
0 comments
|
Download
|
|
M |
components/password_manager/sync/browser/password_model_worker.cc
|
View
|
1
2
3
4
5
6
7
8
9
|
2 chunks |
+11 lines, -44 lines |
0 comments
|
Download
|
|
M |
components/sync/BUILD.gn
|
View
|
1
|
2 chunks |
+0 lines, -3 lines |
0 comments
|
Download
|
|
D |
components/sync/base/scoped_event_signal.h
|
View
|
1
|
1 chunk |
+0 lines, -40 lines |
0 comments
|
Download
|
|
D |
components/sync/base/scoped_event_signal.cc
|
View
|
1
|
1 chunk |
+0 lines, -34 lines |
0 comments
|
Download
|
|
D |
components/sync/base/scoped_event_signal_unittest.cc
|
View
|
1
|
1 chunk |
+0 lines, -84 lines |
0 comments
|
Download
|
|
M |
components/sync/engine/browser_thread_model_worker.h
|
View
|
1
2
3
4
5
6
7
8
9
|
2 chunks |
+2 lines, -9 lines |
0 comments
|
Download
|
|
M |
components/sync/engine/browser_thread_model_worker.cc
|
View
|
1
2
3
4
5
6
7
8
9
|
2 chunks |
+6 lines, -39 lines |
0 comments
|
Download
|
|
M |
components/sync/engine/browser_thread_model_worker_unittest.cc
|
View
|
1
2
3
4
5
6
7
8
9
|
1 chunk |
+2 lines, -3 lines |
0 comments
|
Download
|
|
M |
components/sync/engine/model_safe_worker.h
|
View
|
1
2
3
4
5
6
7
8
9
|
4 chunks |
+30 lines, -16 lines |
0 comments
|
Download
|
|
M |
components/sync/engine/model_safe_worker.cc
|
View
|
1
2
3
4
5
6
7
8
9
|
2 chunks |
+76 lines, -11 lines |
0 comments
|
Download
|
|
M |
components/sync/engine/model_safe_worker_unittest.cc
|
View
|
1
2
3
4
5
6
7
8
9
|
2 chunks |
+163 lines, -2 lines |
0 comments
|
Download
|
|
M |
components/sync/engine/passive_model_worker.h
|
View
|
1
2
3
4
5
6
7
8
9
|
2 chunks |
+2 lines, -4 lines |
0 comments
|
Download
|
|
M |
components/sync/engine/passive_model_worker.cc
|
View
|
1
2
3
4
5
6
7
8
9
|
2 chunks |
+3 lines, -5 lines |
0 comments
|
Download
|
|
M |
components/sync/engine/ui_model_worker.h
|
View
|
1
2
3
4
5
6
7
8
9
|
2 chunks |
+2 lines, -20 lines |
0 comments
|
Download
|
|
M |
components/sync/engine/ui_model_worker.cc
|
View
|
1
2
3
4
5
6
7
8
9
|
2 chunks |
+5 lines, -80 lines |
0 comments
|
Download
|
|
M |
components/sync/engine/ui_model_worker_unittest.cc
|
View
|
1
2
3
4
5
6
7
8
9
|
1 chunk |
+1 line, -1 line |
0 comments
|
Download
|
|
M |
components/sync/engine_impl/directory_update_handler.cc
|
View
|
1
2
3
4
5
6
7
8
9
|
2 chunks |
+2 lines, -1 line |
0 comments
|
Download
|
|
M |
components/sync/test/engine/fake_model_worker.h
|
View
|
1
2
3
4
5
6
7
8
9
|
1 chunk |
+2 lines, -3 lines |
0 comments
|
Download
|
|
M |
components/sync/test/engine/fake_model_worker.cc
|
View
|
1
2
3
4
5
6
7
8
9
|
2 chunks |
+3 lines, -4 lines |
0 comments
|
Download
|
Total messages: 68 (54 generated)
|