summaryrefslogtreecommitdiffstats
path: root/chrome/browser/net
diff options
context:
space:
mode:
authorjar@chromium.org <jar@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-08-10 01:11:15 +0000
committerjar@chromium.org <jar@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-08-10 01:11:15 +0000
commit6f2aaf2414a8cabf623236ce8a17673e98ff24e7 (patch)
tree935ac6e2dde6845af9aa451208ef678697a903ff /chrome/browser/net
parentee68378a4c92a66b80288a42e584dbd9b4e89619 (diff)
downloadchromium_src-6f2aaf2414a8cabf623236ce8a17673e98ff24e7.zip
chromium_src-6f2aaf2414a8cabf623236ce8a17673e98ff24e7.tar.gz
chromium_src-6f2aaf2414a8cabf623236ce8a17673e98ff24e7.tar.bz2
(repair leak) Handle synchronous request for a preconnection
In some situations, the preconnection can be serviced synchronously, and then there will be no callback to release the Preconnect instance. This change properly handles that eventuality. BUG=51133 r=wtc Review URL: http://codereview.chromium.org/3115003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@55517 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/net')
-rw-r--r--chrome/browser/net/preconnect.cc15
1 files changed, 9 insertions, 6 deletions
diff --git a/chrome/browser/net/preconnect.cc b/chrome/browser/net/preconnect.cc
index a20f3c3..eef027e 100644
--- a/chrome/browser/net/preconnect.cc
+++ b/chrome/browser/net/preconnect.cc
@@ -126,6 +126,7 @@ void Preconnect::Connect(const GURL& url) {
// unused socket, when a previously used socket was available.
net::RequestPriority priority = net::HIGHEST;
+ int rv = net::OK; // Result of Init call.
if (url.SchemeIs("https")) {
group_name = StringPrintf("ssl/%s", group_name.c_str());
@@ -143,15 +144,17 @@ void Preconnect::Connect(const GURL& url) {
const scoped_refptr<net::SSLClientSocketPool>& pool =
session->ssl_socket_pool();
- handle_.Init(group_name, ssl_params, priority, this, pool,
+ rv = handle_.Init(group_name, ssl_params, priority, this, pool,
+ net::BoundNetLog());
+ } else {
+ const scoped_refptr<net::TCPClientSocketPool>& pool =
+ session->tcp_socket_pool();
+ rv = handle_.Init(group_name, tcp_params, priority, this, pool,
net::BoundNetLog());
- return;
}
- const scoped_refptr<net::TCPClientSocketPool>& pool =
- session->tcp_socket_pool();
- handle_.Init(group_name, tcp_params, priority, this, pool,
- net::BoundNetLog());
+ if (rv != net::ERR_IO_PENDING)
+ Release(); // There will be no callback.
}
void Preconnect::RunWithParams(const Tuple1<int>& params) {