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

Side by Side Diff: sync/engine/sync_scheduler_impl.cc

Issue 23189021: sync: Gracefully handle very early shutdown (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix sync_client compile Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "sync/engine/sync_scheduler_impl.h" 5 #include "sync/engine/sync_scheduler_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <cstring> 8 #include <cstring>
9 9
10 #include "base/auto_reset.h" 10 #include "base/auto_reset.h"
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
166 mode_(NORMAL_MODE), 166 mode_(NORMAL_MODE),
167 delay_provider_(delay_provider), 167 delay_provider_(delay_provider),
168 syncer_(syncer), 168 syncer_(syncer),
169 session_context_(context), 169 session_context_(context),
170 no_scheduling_allowed_(false), 170 no_scheduling_allowed_(false),
171 do_poll_after_credentials_updated_(false) { 171 do_poll_after_credentials_updated_(false) {
172 } 172 }
173 173
174 SyncSchedulerImpl::~SyncSchedulerImpl() { 174 SyncSchedulerImpl::~SyncSchedulerImpl() {
175 DCHECK(CalledOnValidThread()); 175 DCHECK(CalledOnValidThread());
176 StopImpl(); 176 Stop();
177 } 177 }
178 178
179 void SyncSchedulerImpl::OnCredentialsUpdated() { 179 void SyncSchedulerImpl::OnCredentialsUpdated() {
180 DCHECK(CalledOnValidThread()); 180 DCHECK(CalledOnValidThread());
181 181
182 if (HttpResponse::SYNC_AUTH_ERROR == 182 if (HttpResponse::SYNC_AUTH_ERROR ==
183 session_context_->connection_manager()->server_status()) { 183 session_context_->connection_manager()->server_status()) {
184 OnServerConnectionErrorFixed(); 184 OnServerConnectionErrorFixed();
185 } 185 }
186 } 186 }
(...skipping 450 matching lines...) Expand 10 before | Expand all | Expand 10 after
637 weak_ptr_factory_.GetWeakPtr())); 637 weak_ptr_factory_.GetWeakPtr()));
638 } else { 638 } else {
639 pending_wakeup_timer_.Start( 639 pending_wakeup_timer_.Start(
640 FROM_HERE, 640 FROM_HERE,
641 wait_interval_->length, 641 wait_interval_->length,
642 base::Bind(&SyncSchedulerImpl::ExponentialBackoffRetry, 642 base::Bind(&SyncSchedulerImpl::ExponentialBackoffRetry,
643 weak_ptr_factory_.GetWeakPtr())); 643 weak_ptr_factory_.GetWeakPtr()));
644 } 644 }
645 } 645 }
646 646
647 void SyncSchedulerImpl::RequestStop() { 647 void SyncSchedulerImpl::Stop() {
648 syncer_->RequestEarlyExit(); // Safe to call from any thread.
649 DCHECK(weak_handle_this_.IsInitialized());
650 SDVLOG(3) << "Posting StopImpl";
651 weak_handle_this_.Call(FROM_HERE,
652 &SyncSchedulerImpl::StopImpl);
653 }
654
655 void SyncSchedulerImpl::StopImpl() {
656 DCHECK(CalledOnValidThread()); 648 DCHECK(CalledOnValidThread());
657 SDVLOG(2) << "StopImpl called"; 649 SDVLOG(2) << "Stop called";
658 650
659 // Kill any in-flight method calls. 651 // Kill any in-flight method calls.
660 weak_ptr_factory_.InvalidateWeakPtrs(); 652 weak_ptr_factory_.InvalidateWeakPtrs();
661 wait_interval_.reset(); 653 wait_interval_.reset();
662 NotifyRetryTime(base::Time()); 654 NotifyRetryTime(base::Time());
663 poll_timer_.Stop(); 655 poll_timer_.Stop();
664 pending_wakeup_timer_.Stop(); 656 pending_wakeup_timer_.Stop();
665 pending_configure_params_.reset(); 657 pending_configure_params_.reset();
666 if (started_) 658 if (started_)
667 started_ = false; 659 started_ = false;
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after
855 void SyncSchedulerImpl::OnReceivedClientInvalidationHintBufferSize(int size) { 847 void SyncSchedulerImpl::OnReceivedClientInvalidationHintBufferSize(int size) {
856 if (size > 0) 848 if (size > 0)
857 nudge_tracker_.SetHintBufferSize(size); 849 nudge_tracker_.SetHintBufferSize(size);
858 else 850 else
859 NOTREACHED() << "Hint buffer size should be > 0."; 851 NOTREACHED() << "Hint buffer size should be > 0.";
860 } 852 }
861 853
862 void SyncSchedulerImpl::OnShouldStopSyncingPermanently() { 854 void SyncSchedulerImpl::OnShouldStopSyncingPermanently() {
863 DCHECK(CalledOnValidThread()); 855 DCHECK(CalledOnValidThread());
864 SDVLOG(2) << "OnShouldStopSyncingPermanently"; 856 SDVLOG(2) << "OnShouldStopSyncingPermanently";
865 syncer_->RequestEarlyExit(); // Thread-safe. 857 Stop();
866 Notify(SyncEngineEvent::STOP_SYNCING_PERMANENTLY); 858 Notify(SyncEngineEvent::STOP_SYNCING_PERMANENTLY);
867 } 859 }
868 860
869 void SyncSchedulerImpl::OnActionableError( 861 void SyncSchedulerImpl::OnActionableError(
870 const sessions::SyncSessionSnapshot& snap) { 862 const sessions::SyncSessionSnapshot& snap) {
871 DCHECK(CalledOnValidThread()); 863 DCHECK(CalledOnValidThread());
872 SDVLOG(2) << "OnActionableError"; 864 SDVLOG(2) << "OnActionableError";
873 SyncEngineEvent event(SyncEngineEvent::ACTIONABLE_ERROR); 865 SyncEngineEvent event(SyncEngineEvent::ACTIONABLE_ERROR);
874 event.snapshot = snap; 866 event.snapshot = snap;
875 session_context_->NotifyListeners(event); 867 session_context_->NotifyListeners(event);
876 } 868 }
877 869
878 void SyncSchedulerImpl::OnSyncProtocolError( 870 void SyncSchedulerImpl::OnSyncProtocolError(
879 const sessions::SyncSessionSnapshot& snapshot) { 871 const sessions::SyncSessionSnapshot& snapshot) {
880 DCHECK(CalledOnValidThread()); 872 DCHECK(CalledOnValidThread());
881 if (ShouldRequestEarlyExit( 873 if (ShouldRequestEarlyExit(
882 snapshot.model_neutral_state().sync_protocol_error)) { 874 snapshot.model_neutral_state().sync_protocol_error)) {
883 SDVLOG(2) << "Sync Scheduler requesting early exit."; 875 SDVLOG(2) << "Sync Scheduler requesting early exit.";
884 syncer_->RequestEarlyExit(); // Thread-safe. 876 Stop();
885 } 877 }
886 if (IsActionableError(snapshot.model_neutral_state().sync_protocol_error)) 878 if (IsActionableError(snapshot.model_neutral_state().sync_protocol_error))
887 OnActionableError(snapshot); 879 OnActionableError(snapshot);
888 } 880 }
889 881
890 void SyncSchedulerImpl::SetNotificationsEnabled(bool notifications_enabled) { 882 void SyncSchedulerImpl::SetNotificationsEnabled(bool notifications_enabled) {
891 DCHECK(CalledOnValidThread()); 883 DCHECK(CalledOnValidThread());
892 session_context_->set_notifications_enabled(notifications_enabled); 884 session_context_->set_notifications_enabled(notifications_enabled);
893 if (notifications_enabled) 885 if (notifications_enabled)
894 nudge_tracker_.OnInvalidationsEnabled(); 886 nudge_tracker_.OnInvalidationsEnabled();
895 else 887 else
896 nudge_tracker_.OnInvalidationsDisabled(); 888 nudge_tracker_.OnInvalidationsDisabled();
897 } 889 }
898 890
899 base::TimeDelta SyncSchedulerImpl::GetSessionsCommitDelay() const { 891 base::TimeDelta SyncSchedulerImpl::GetSessionsCommitDelay() const {
900 DCHECK(CalledOnValidThread()); 892 DCHECK(CalledOnValidThread());
901 return sessions_commit_delay_; 893 return sessions_commit_delay_;
902 } 894 }
903 895
904 #undef SDVLOG_LOC 896 #undef SDVLOG_LOC
905 897
906 #undef SDVLOG 898 #undef SDVLOG
907 899
908 #undef SLOG 900 #undef SLOG
909 901
910 #undef ENUM_CASE 902 #undef ENUM_CASE
911 903
912 } // namespace syncer 904 } // namespace syncer
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698