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

Issue 6293005: Fix preconnect crash on synchronous socket error. (Closed)

Created:
9 years, 11 months ago by willchan no longer on Chromium
Modified:
9 years, 7 months ago
Reviewers:
Mike Belshe, mbelshe
CC:
chromium-reviews, cbentzel+watch_chromium.org, darin-cc_chromium.org, Paweł Hajdan Jr.
Visibility:
Public.

Description

Fix preconnect crash on synchronous socket error. GetAdditionalErrorState() was being called, which stores the error state into the ClientSocketHandle. When we preconnect, we never have a ClientSocketHandle, so don't bother tryiing to store the error state nor get the error socket. BUG=69214 TEST=net_unittests Committed: http://src.chromium.org/viewvc/chrome?view=rev&revision=71481

Patch Set 1 #

Unified diffs Side-by-side diffs Delta from patch set Stats (+13 lines, -2 lines) Patch
M net/socket/client_socket_pool_base.cc View 1 chunk +6 lines, -2 lines 0 comments Download
M net/socket/client_socket_pool_base_unittest.cc View 1 chunk +7 lines, -0 lines 0 comments Download

Messages

Total messages: 2 (0 generated)
willchan no longer on Chromium
9 years, 11 months ago (2011-01-14 18:32:28 UTC) #1
mbelshe
9 years, 11 months ago (2011-01-14 18:55:54 UTC) #2
lgtm

On Fri, Jan 14, 2011 at 10:32 AM, <willchan@chromium.org> wrote:

> Reviewers: Mike Belshe,
>
> Description:
> Fix preconnect crash on synchronous socket error.
>
> GetAdditionalErrorState() was being called, which stores the error state
> into
> the ClientSocketHandle.  When we preconnect, we never have a
> ClientSocketHandle,
> so don't bother tryiing to store the error state nor get the error socket.
>
> BUG=69214
> TEST=net_unittests
>
> Please review this at http://codereview.chromium.org/6293005/
>
> SVN Base: svn://svn.chromium.org/chrome/trunk/src
>
> Affected files:
>  M net/socket/client_socket_pool_base.cc
>  M net/socket/client_socket_pool_base_unittest.cc
>
>
> Index: net/socket/client_socket_pool_base.cc
> diff --git a/net/socket/client_socket_pool_base.cc
> b/net/socket/client_socket_pool_base.cc
> index
>
86ba2dd47212c94da9f2816ba22dbdbd7be52909..816ecc97c456500f8a9543306c9ab6e9e43bc333
> 100644
> --- a/net/socket/client_socket_pool_base.cc
> +++ b/net/socket/client_socket_pool_base.cc
> @@ -341,8 +341,12 @@ int ClientSocketPoolBaseHelper::RequestSocketInternal(
>     group->AddJob(connect_job.release());
>   } else {
>     LogBoundConnectJobToRequest(connect_job->net_log().source(), request);
> -    connect_job->GetAdditionalErrorState(handle);
> -    ClientSocket* error_socket = connect_job->ReleaseSocket();
> +    ClientSocket* error_socket = NULL;
> +    if (!preconnecting) {
> +      DCHECK(handle);
> +      connect_job->GetAdditionalErrorState(handle);
> +      error_socket = connect_job->ReleaseSocket();
> +    }
>     if (error_socket) {
>       HandOutSocket(error_socket, false /* not reused */, handle,
>                     base::TimeDelta(), group, request->net_log());
> Index: net/socket/client_socket_pool_base_unittest.cc
> diff --git a/net/socket/client_socket_pool_base_unittest.cc
> b/net/socket/client_socket_pool_base_unittest.cc
> index
>
7c0e2e1ed1504809c017f15b999a44377e674183..200730950d0a63634b1185b2fdd8055ae7f6eb64
> 100644
> --- a/net/socket/client_socket_pool_base_unittest.cc
> +++ b/net/socket/client_socket_pool_base_unittest.cc
> @@ -2925,6 +2925,13 @@ TEST_F(ClientSocketPoolBaseTest,
> RequestSocketsSynchronousError) {
>                         BoundNetLog());
>
>   ASSERT_FALSE(pool_->HasGroup("a"));
> +
> +  connect_job_factory_->set_job_type(
> +      TestConnectJob::kMockAdditionalErrorStateJob);
> +  pool_->RequestSockets("a", &params_, kDefaultMaxSocketsPerGroup,
> +                        BoundNetLog());
> +
> +  ASSERT_FALSE(pool_->HasGroup("a"));
>  }
>
>  TEST_F(ClientSocketPoolBaseTest, RequestSocketsMultipleTimesDoesNothing) {
>
>
>

Powered by Google App Engine
This is Rietveld 408576698