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

Issue 2848903002: [merge m59] [Sync] Refactor ModelSafeWorker::DoWorkAndWaitUntilDone() to avoid code duplication. (Closed)

Created:
3 years, 7 months ago by fdoray
Modified:
3 years, 7 months ago
Reviewers:
CC:
chromium-reviews
Target Ref:
refs/branch-heads/3071
Project:
chromium
Visibility:
Public.

Description

[merge m59] [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} (cherry picked from commit eeeb0d0ec28227aba875195e0f20076414fc4596) Review-Url: https://codereview.chromium.org/2848903002 . Cr-Commit-Position: refs/branch-heads/3071@{#292} Cr-Branched-From: a106f0abbf69dad349d4aaf4bcc4f5d376dd2377-refs/heads/master@{#464641} Committed: https://chromium.googlesource.com/chromium/src/+/6927834a532c164dc1899ff7f0c549eae2dbe7a3

Patch Set 1 #

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 chunk +1 line, -0 lines 0 comments Download
M components/history/core/browser/history_model_worker.h View 1 chunk +2 lines, -4 lines 0 comments Download
M components/history/core/browser/history_model_worker.cc View 5 chunks +17 lines, -72 lines 0 comments Download
A components/history/core/browser/history_model_worker_unittest.cc View 1 chunk +227 lines, -0 lines 0 comments Download
M components/password_manager/sync/browser/password_model_worker.h View 1 chunk +2 lines, -4 lines 0 comments Download
M components/password_manager/sync/browser/password_model_worker.cc View 2 chunks +11 lines, -44 lines 0 comments Download
M components/sync/BUILD.gn View 2 chunks +0 lines, -3 lines 0 comments Download
D components/sync/base/scoped_event_signal.h View 1 chunk +0 lines, -40 lines 0 comments Download
D components/sync/base/scoped_event_signal.cc View 1 chunk +0 lines, -34 lines 0 comments Download
D components/sync/base/scoped_event_signal_unittest.cc View 1 chunk +0 lines, -84 lines 0 comments Download
M components/sync/engine/browser_thread_model_worker.h View 2 chunks +2 lines, -9 lines 0 comments Download
M components/sync/engine/browser_thread_model_worker.cc View 2 chunks +6 lines, -39 lines 0 comments Download
M components/sync/engine/browser_thread_model_worker_unittest.cc View 1 chunk +2 lines, -3 lines 0 comments Download
M components/sync/engine/model_safe_worker.h View 4 chunks +30 lines, -16 lines 0 comments Download
M components/sync/engine/model_safe_worker.cc View 2 chunks +76 lines, -11 lines 0 comments Download
M components/sync/engine/model_safe_worker_unittest.cc View 2 chunks +163 lines, -2 lines 0 comments Download
M components/sync/engine/passive_model_worker.h View 2 chunks +2 lines, -4 lines 0 comments Download
M components/sync/engine/passive_model_worker.cc View 2 chunks +3 lines, -5 lines 0 comments Download
M components/sync/engine/ui_model_worker.h View 2 chunks +2 lines, -20 lines 0 comments Download
M components/sync/engine/ui_model_worker.cc View 2 chunks +5 lines, -80 lines 0 comments Download
M components/sync/engine/ui_model_worker_unittest.cc View 1 chunk +1 line, -1 line 0 comments Download
M components/sync/engine_impl/directory_update_handler.cc View 2 chunks +2 lines, -1 line 0 comments Download
M components/sync/test/engine/fake_model_worker.h View 1 chunk +2 lines, -3 lines 0 comments Download
M components/sync/test/engine/fake_model_worker.cc View 2 chunks +3 lines, -4 lines 0 comments Download

Messages

Total messages: 2 (1 generated)
fdoray
3 years, 7 months ago (2017-04-28 14:45:05 UTC) #2
Message was sent while issue was closed.
Committed patchset #1 (id:1) manually as
6927834a532c164dc1899ff7f0c549eae2dbe7a3.

Powered by Google App Engine
This is Rietveld 408576698