Skip to content

Commit

Permalink
Fix connection pooling for different clients with the same pool.
Browse files Browse the repository at this point in the history
Closes: #5519
  • Loading branch information
swankjesse committed Oct 2, 2019
1 parent ae67a3a commit 3497f02
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 4 deletions.
6 changes: 3 additions & 3 deletions okhttp/src/main/java/okhttp3/OkHttpClient.kt
Expand Up @@ -163,9 +163,9 @@ open class OkHttpClient internal constructor(

@get:JvmName("proxySelector") val proxySelector: ProxySelector =
when {
// Avoid possible SecurityException from ProxySelector.getDefault
builder.proxy != null -> NullProxySelector()
else -> builder.proxySelector ?: ProxySelector.getDefault() ?: NullProxySelector()
// Defer calls to ProxySelector.getDefault() because it can throw a SecurityException.
builder.proxy != null -> NullProxySelector
else -> builder.proxySelector ?: ProxySelector.getDefault() ?: NullProxySelector
}

@get:JvmName("proxyAuthenticator") val proxyAuthenticator: Authenticator =
Expand Down
Expand Up @@ -24,7 +24,7 @@ import java.net.URI
/**
* A proxy selector that always returns the [Proxy.NO_PROXY].
*/
open class NullProxySelector : ProxySelector() {
object NullProxySelector : ProxySelector() {
override fun select(uri: URI?): List<Proxy> {
requireNotNull(uri) { "uri must not be null" }
return listOf(Proxy.NO_PROXY)
Expand Down
30 changes: 30 additions & 0 deletions okhttp/src/test/java/okhttp3/CallTest.java
Expand Up @@ -786,6 +786,36 @@ private void postBodyRetransmittedAfterAuthorizationFail(String body) throws Exc
assertThat(server.takeRequest().getSequenceNumber()).isEqualTo(2);
}

/**
*
* @throws Exception
*/
@Test public void connectionPoolingWithFreshClientSamePool() throws Exception {
server.enqueue(new MockResponse().setBody("abc"));
server.enqueue(new MockResponse().setBody("def"));
server.enqueue(new MockResponse().setBody("ghi"));

client = new OkHttpClient.Builder()
.connectionPool(client.connectionPool())
.proxy(server.toProxyAddress())
.build();
executeSynchronously("/a").assertBody("abc");
client = new OkHttpClient.Builder()
.connectionPool(client.connectionPool())
.proxy(server.toProxyAddress())
.build();
executeSynchronously("/b").assertBody("def");
client = new OkHttpClient.Builder()
.connectionPool(client.connectionPool())
.proxy(server.toProxyAddress())
.build();
executeSynchronously("/c").assertBody("ghi");

assertThat(server.takeRequest().getSequenceNumber()).isEqualTo(0);
assertThat(server.takeRequest().getSequenceNumber()).isEqualTo(1);
assertThat(server.takeRequest().getSequenceNumber()).isEqualTo(2);
}

@Test public void connectionPooling_Async() throws Exception {
server.enqueue(new MockResponse().setBody("abc"));
server.enqueue(new MockResponse().setBody("def"));
Expand Down

0 comments on commit 3497f02

Please sign in to comment.