diff options
author | rlarocque@chromium.org <rlarocque@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-09-10 00:39:48 +0000 |
---|---|---|
committer | rlarocque@chromium.org <rlarocque@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-09-10 00:39:48 +0000 |
commit | 33c1f53914a7a15b51cb226f572f5439e8ef9249 (patch) | |
tree | 553286bc9bc1966e753bbc6e1f703fbaab96f886 /sync/internal_api/sync_manager_impl.h | |
parent | 98f936181964f99cd0c73707cfd9027d0c528702 (diff) | |
download | chromium_src-33c1f53914a7a15b51cb226f572f5439e8ef9249.zip chromium_src-33c1f53914a7a15b51cb226f572f5439e8ef9249.tar.gz chromium_src-33c1f53914a7a15b51cb226f572f5439e8ef9249.tar.bz2 |
sync: Gracefully handle very early shutdown
Introduce a new object to communicate cross-thread cancellation signals.
This new object, the CancellationSignal, is protected by a lock. It
allows the receiving thread to query whether or not a stop has been
requested. It also allows the receiving thread to safely register a
cross-thread callback to be invoked immediately when a stop is
requested.
This class is used to reimplement the UI thread to sync thread early
shutdown signal. Previously, the UI thread would try to call in to
objects owned by the sync thread. This required a workaround if the
signal arrived very early, since we couldn't guarantee the sync thread
had actually created those objects until later. The CancellationSignal
is owned by the UI thread, so it is safe to call its RequestStop() at
any point during sync initialization. The sync thread will receive the
signal when it's ready.
The new scheme has a few advantages over the old:
- Thread ownership is simpler. The SyncBackendHost::Core, SyncManager,
ServerConnectionManager, SyncScheduler and Syncer can now claim that
all their member functions run on the sync thread.
- We no longer need to implement special case logic for when a shutdown
is requested before the SyncManager has initialized.
- In a future CL, we can take advantage of the fact that we no longer
require the special case to reduce inter-thread communication during
sync startup. This will make startup simpler and, in some cases,
improve sync startup time by as much as a few hundred milliseconds.
- This will make it easier to address crbug.com/236451.
BUG=236451
Review URL: https://chromiumcodereview.appspot.com/23189021
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@222154 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'sync/internal_api/sync_manager_impl.h')
-rw-r--r-- | sync/internal_api/sync_manager_impl.h | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/sync/internal_api/sync_manager_impl.h b/sync/internal_api/sync_manager_impl.h index 03d6636..0283065 100644 --- a/sync/internal_api/sync_manager_impl.h +++ b/sync/internal_api/sync_manager_impl.h @@ -81,7 +81,8 @@ class SYNC_EXPORT_PRIVATE SyncManagerImpl : scoped_ptr<UnrecoverableErrorHandler> unrecoverable_error_handler, ReportUnrecoverableErrorFunction report_unrecoverable_error_function, - bool use_oauth2_token) OVERRIDE; + bool use_oauth2_token, + CancelationSignal* cancelation_signal) OVERRIDE; virtual void ThrowUnrecoverableError() OVERRIDE; virtual ModelTypeSet InitialSyncEndedTypes() OVERRIDE; virtual ModelTypeSet GetTypesWithEmptyProgressMarkerToken( @@ -106,7 +107,6 @@ class SYNC_EXPORT_PRIVATE SyncManagerImpl : virtual void RemoveObserver(SyncManager::Observer* observer) OVERRIDE; virtual SyncStatus GetDetailedStatus() const OVERRIDE; virtual void SaveChanges() OVERRIDE; - virtual void StopSyncingForShutdown() OVERRIDE; virtual void ShutdownOnSyncThread() OVERRIDE; virtual UserShare* GetUserShare() OVERRIDE; virtual const std::string cache_guid() OVERRIDE; |