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

Unified Diff: sync/engine/net/server_connection_manager.cc

Issue 23717047: Retry: sync: Gracefully handle early shutdown (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Renames 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « sync/engine/net/server_connection_manager.h ('k') | sync/engine/sync_scheduler.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sync/engine/net/server_connection_manager.cc
diff --git a/sync/engine/net/server_connection_manager.cc b/sync/engine/net/server_connection_manager.cc
index 0076543374fcdcedae2a86bfe62f2a1491ecb5e0..99e62b0659e4b789b2d470fab64c835dd53a4938 100644
--- a/sync/engine/net/server_connection_manager.cc
+++ b/sync/engine/net/server_connection_manager.cc
@@ -16,6 +16,7 @@
#include "net/http/http_status_code.h"
#include "sync/engine/net/url_translator.h"
#include "sync/engine/syncer.h"
+#include "sync/internal_api/public/base/cancelation_signal.h"
#include "sync/protocol/sync.pb.h"
#include "sync/syncable/directory.h"
#include "url/gurl.h"
@@ -177,7 +178,8 @@ ServerConnectionManager::ServerConnectionManager(
const string& server,
int port,
bool use_ssl,
- bool use_oauth2_token)
+ bool use_oauth2_token,
+ CancelationSignal* cancelation_signal)
: sync_server_(server),
sync_server_port_(port),
use_ssl_(use_ssl),
@@ -185,10 +187,22 @@ ServerConnectionManager::ServerConnectionManager(
proto_sync_path_(kSyncServerSyncPath),
server_status_(HttpResponse::NONE),
terminated_(false),
- active_connection_(NULL) {
+ active_connection_(NULL),
+ cancelation_signal_(cancelation_signal),
+ signal_handler_registered_(false) {
+ signal_handler_registered_ = cancelation_signal_->TryRegisterHandler(this);
+ if (!signal_handler_registered_) {
+ // Calling a virtual function from a constructor. We can get away with it
+ // here because ServerConnectionManager::OnSignalReceived() is the function
+ // we want to call.
+ OnSignalReceived();
+ }
}
ServerConnectionManager::~ServerConnectionManager() {
+ if (signal_handler_registered_) {
+ cancelation_signal_->UnregisterHandler(this);
+ }
}
ServerConnectionManager::Connection*
@@ -348,7 +362,7 @@ ServerConnectionManager::Connection* ServerConnectionManager::MakeConnection()
return NULL; // For testing.
}
-void ServerConnectionManager::TerminateAllIO() {
+void ServerConnectionManager::OnSignalReceived() {
base::AutoLock lock(terminate_connection_lock_);
terminated_ = true;
if (active_connection_)
« no previous file with comments | « sync/engine/net/server_connection_manager.h ('k') | sync/engine/sync_scheduler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698