commit | e3ae411f13115f099e3ef1688a04052019f34402 | [log] [tgz] |
---|---|---|
author | Tobias Thierer <tobiast@google.com> | Tue Jan 24 17:43:03 2017 +0000 |
committer | gitbuildkicker <android-build@google.com> | Wed Jan 25 13:14:50 2017 -0800 |
tree | 596aea6e32250865c9141c116649bd83e5a95c6f | |
parent | afef573fbaa109dcbee5ec186fb144f6380a1d20 [diff] |
OkHttp quick fix: canceled StreamAllocations can never recover When a HttpURLConnection is disconnected in the middle of connecting, this can lead to an infinite loop because: - StreamAllocation.findConnection() immediately throws (before advancing the RouteSelector) - StreamAllocation.recover() returns true, indicating that a retry is permissible - higher level logic then retries the connection indefinitely in a busy loop This bug does not occur in the latest version of OkHttp (3.5) but can be reproduced directly on top of OkHttp 2.7.5. To give us more time to figure out the best fix, this CL makes the narrowest possible fix for the concrete behavior observed in the wild. There are related cases where StreamAllocation.recover() returns true but findConnection() immediately throws; these have not been observed and are not addressed by this CL: - StreamAllocation.released; this case looks at first glance like it is not reachable via publicly exposed API (HttpURLConnection) - canceled case for recover(IOException e, Sink requestBodyOut): touching this breaks OkHttp's CallTest.canceledBeforeIOSignalsOnFailure*() because the reported error message becomes something like "Socket closed", rather than reviewed "Canceled". Test: CtsLibcoreTestCases Test: CtsLibcoreOkHttpTestCases Bug: 33763156 Change-Id: Ie8e80559f9364cbd0a01c54b441fc10402b37862 (cherry picked from commit 715f88092afc34bbe129118fa9ed737ad38ec050)
An HTTP & SPDY client for Android and Java applications. For more information see the website and the wiki.
Download the latest JAR or grab via Maven:
<dependency> <groupId>com.squareup.okhttp</groupId> <artifactId>okhttp</artifactId> <version>2.6.0</version> </dependency>
or Gradle:
compile 'com.squareup.okhttp:okhttp:2.6.0'
Snapshots of the development version are available in Sonatype's snapshots
repository.
A library for testing HTTP, HTTPS, HTTP/2.0, and SPDY clients.
MockWebServer coupling with OkHttp is essential for proper testing of SPDY and HTTP/2.0 so that code can be shared.
Download the latest JAR or grab via Maven:
<dependency> <groupId>com.squareup.okhttp</groupId> <artifactId>mockwebserver</artifactId> <version>2.6.0</version> <scope>test</scope> </dependency>
or Gradle:
testCompile 'com.squareup.okhttp:mockwebserver:2.6.0'
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.