summaryrefslogtreecommitdiffstats
path: root/net/base
diff options
context:
space:
mode:
authoreroman@chromium.org <eroman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-01-07 22:50:10 +0000
committereroman@chromium.org <eroman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-01-07 22:50:10 +0000
commit16a0274914dce60fb4a7a0ba72e5c090277d3e2e (patch)
tree0dcb19a81cf0b67fd0c8d63e11be26025cf7295e /net/base
parent9b7f9ae5175762408d10f544e2dba412ac31519f (diff)
downloadchromium_src-16a0274914dce60fb4a7a0ba72e5c090277d3e2e.zip
chromium_src-16a0274914dce60fb4a7a0ba72e5c090277d3e2e.tar.gz
chromium_src-16a0274914dce60fb4a7a0ba72e5c090277d3e2e.tar.bz2
Cancel any outstanding host resolve when calling SOCKSClientSocket::Disconnect().
BUG=25440 TEST=SOCKSClientSocketTest.DisconnectWhileHostResolveInProgress Review URL: http://codereview.chromium.org/525084 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@35747 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/base')
-rw-r--r--net/base/host_resolver.cc11
-rw-r--r--net/base/host_resolver.h4
2 files changed, 12 insertions, 3 deletions
diff --git a/net/base/host_resolver.cc b/net/base/host_resolver.cc
index b953443..ebad57e 100644
--- a/net/base/host_resolver.cc
+++ b/net/base/host_resolver.cc
@@ -20,9 +20,7 @@ SingleRequestHostResolver::SingleRequestHostResolver(HostResolver* resolver)
}
SingleRequestHostResolver::~SingleRequestHostResolver() {
- if (cur_request_) {
- resolver_->CancelRequest(cur_request_);
- }
+ Cancel();
}
int SingleRequestHostResolver::Resolve(const HostResolver::RequestInfo& info,
@@ -49,6 +47,13 @@ int SingleRequestHostResolver::Resolve(const HostResolver::RequestInfo& info,
return rv;
}
+void SingleRequestHostResolver::Cancel() {
+ if (cur_request_) {
+ resolver_->CancelRequest(cur_request_);
+ cur_request_ = NULL;
+ }
+}
+
void SingleRequestHostResolver::OnResolveCompletion(int result) {
DCHECK(cur_request_ && cur_request_callback_);
diff --git a/net/base/host_resolver.h b/net/base/host_resolver.h
index 3c7a9c9..8a88402 100644
--- a/net/base/host_resolver.h
+++ b/net/base/host_resolver.h
@@ -185,6 +185,10 @@ class SingleRequestHostResolver {
CompletionCallback* callback,
LoadLog* load_log);
+ // Cancels the in-progress request, if any. This prevents the callback
+ // from being invoked. Resolve() can be called again after cancelling.
+ void Cancel();
+
private:
// Callback for when the request to |resolver_| completes, so we dispatch
// to the user's callback.