You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by ol...@apache.org on 2019/08/23 09:30:45 UTC

[httpcomponents-client] 01/02: Fixed concurrent use of threading unsafe ClassicHttpRequest messages

This is an automated email from the ASF dual-hosted git repository.

olegk pushed a commit to branch development
in repository https://gitbox.apache.org/repos/asf/httpcomponents-client.git

commit 3d17df0636872d82825ef996f23983c74079d38a
Author: Oleg Kalnichevski <ol...@apache.org>
AuthorDate: Thu Aug 22 16:08:12 2019 +0200

    Fixed concurrent use of threading unsafe ClassicHttpRequest messages
---
 .../testing/sync/TestIdleConnectionEviction.java   | 27 ++++++++++++----------
 1 file changed, 15 insertions(+), 12 deletions(-)

diff --git a/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/sync/TestIdleConnectionEviction.java b/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/sync/TestIdleConnectionEviction.java
index c66b395..46cecd1 100644
--- a/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/sync/TestIdleConnectionEviction.java
+++ b/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/sync/TestIdleConnectionEviction.java
@@ -27,11 +27,12 @@
 
 package org.apache.hc.client5.testing.sync;
 
+import java.net.URI;
+
 import org.apache.hc.client5.http.ClientProtocolException;
 import org.apache.hc.client5.http.classic.methods.HttpGet;
 import org.apache.hc.client5.http.impl.IdleConnectionEvictor;
 import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
-import org.apache.hc.core5.http.ClassicHttpRequest;
 import org.apache.hc.core5.http.ClassicHttpResponse;
 import org.apache.hc.core5.http.HttpHost;
 import org.apache.hc.core5.http.io.entity.EntityUtils;
@@ -50,10 +51,10 @@ public class TestIdleConnectionEviction extends LocalServerTestBase {
         final IdleConnectionEvictor idleConnectionMonitor = new IdleConnectionEvictor(this.connManager, TimeValue.ofMilliseconds(50));
         idleConnectionMonitor.start();
 
-        final HttpGet httpget = new HttpGet("/random/1024");
+        final URI requestUri = new URI("/random/1024");
         final WorkerThread[] workers = new WorkerThread[5];
         for (int i = 0; i < workers.length; i++) {
-            workers[i] = new WorkerThread(httpclient, target, httpget, 200);
+            workers[i] = new WorkerThread(httpclient, target, requestUri, 200);
         }
         for (final WorkerThread worker : workers) {
             worker.start();
@@ -72,7 +73,7 @@ public class TestIdleConnectionEviction extends LocalServerTestBase {
 
         private final CloseableHttpClient httpclient;
         private final HttpHost target;
-        private final ClassicHttpRequest request;
+        private final URI requestUri;
         private final int count;
 
         private volatile Exception ex;
@@ -80,12 +81,12 @@ public class TestIdleConnectionEviction extends LocalServerTestBase {
         public WorkerThread(
                 final CloseableHttpClient httpclient,
                 final HttpHost target,
-                final ClassicHttpRequest request,
+                final URI requestUri,
                 final int count) {
             super();
             this.httpclient = httpclient;
             this.target = target;
-            this.request = request;
+            this.requestUri = requestUri;
             this.count = count;
         }
 
@@ -93,13 +94,15 @@ public class TestIdleConnectionEviction extends LocalServerTestBase {
         public void run() {
             try {
                 for (int i = 0; i < this.count; i++) {
-                    final ClassicHttpResponse response = this.httpclient.execute(this.target, this.request);
-                    final int status = response.getCode();
-                    if (status != 200) {
-                        throw new ClientProtocolException("Unexpected status code: " + status);
+                    final HttpGet httpget = new HttpGet(this.requestUri);
+                    try (final ClassicHttpResponse response = this.httpclient.execute(this.target, httpget)) {
+                        final int status = response.getCode();
+                        if (status != 200) {
+                            throw new ClientProtocolException("Unexpected status code: " + status);
+                        }
+                        EntityUtils.consume(response.getEntity());
+                        Thread.sleep(10);
                     }
-                    EntityUtils.consume(response.getEntity());
-                    Thread.sleep(10);
                 }
             } catch (final Exception ex) {
                 this.ex = ex;