[ 
https://issues.apache.org/jira/browse/HTTPCORE-634?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17152155#comment-17152155
 ] 

ASF subversion and git services commented on HTTPCORE-634:
----------------------------------------------------------

Commit c96c35cd0c209d0589a2bf1b4bf3fdf6b0c05df3 in httpcomponents-core's branch 
refs/heads/4.4.x from djelinski
[ https://gitbox.apache.org/repos/asf?p=httpcomponents-core.git;h=c96c35c ]

HTTPCORE-634: fix possible race condition

pool cached in getPoolEntryBlocking could be removed from routeToPool map by 
another thread while the thread executing getPoolEntryBlocking was waiting on 
condition.
After this change we check routeToPool after every wait.

> IllegalStateException: Entry [] has not been leased from this pool
> ------------------------------------------------------------------
>
>                 Key: HTTPCORE-634
>                 URL: https://issues.apache.org/jira/browse/HTTPCORE-634
>             Project: HttpComponents HttpCore
>          Issue Type: Bug
>          Components: HttpCore
>    Affects Versions: 4.4.11
>            Reporter: Daniel Jelinski
>            Priority: Major
>          Time Spent: 10m
>  Remaining Estimate: 0h
>
> We are sporadically observing the exception mentioned in summary; while 
> searching the Internet, I found [this SO page 
> |https://stackoverflow.com/questions/46188047/httpclient-4-5-x-multithread-request-error-has-not-been-leased-from-this-pool]
>  providing a semi-reliable reproducer. Minified form follows:
> {code:java}
> public static void main(String[] args) {
>    final PoolingHttpClientConnectionManager cm = new 
> PoolingHttpClientConnectionManager();
>    cm.setDefaultMaxPerRoute(1);
>    class HttpClientThead implements Runnable {
>       final String reqString;
>       final CloseableHttpClient httpclient1 = HttpClients.custom()
>             .setConnectionManager(cm)
>             .build();
>       HttpClientThead(String reqString) {
>          this.reqString = reqString;
>       }
>       public void run() {
>          for (int i = 1; i <= 10; i++) {
>             HttpClientContext context = HttpClientContext.create();
>             try {
>                HttpGet httpget = new HttpGet(reqString);
>                CloseableHttpResponse response = httpclient1.execute(httpget, 
> context);
>                response.close();
>             } catch (Throwable e) {
>                e.printStackTrace();
>                System.exit(1);
>             } finally {
>                cm.closeExpiredConnections();
>             }
>          }
>       }
>    }
>    HttpClientThead t1 = new HttpClientThead("https://issues.apache.org/";);
>    Thread thread1 = new Thread(t1);
>    thread1.start();
>    t1.run();
> }
> {code}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to