diff options
author | jar@chromium.org <jar@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-08-10 01:11:15 +0000 |
---|---|---|
committer | jar@chromium.org <jar@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-08-10 01:11:15 +0000 |
commit | 6f2aaf2414a8cabf623236ce8a17673e98ff24e7 (patch) | |
tree | 935ac6e2dde6845af9aa451208ef678697a903ff /chrome/browser/net | |
parent | ee68378a4c92a66b80288a42e584dbd9b4e89619 (diff) | |
download | chromium_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.cc | 15 |
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) { |