[ 
https://issues.apache.org/jira/browse/HTTPCLIENT-2399?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Oleg Kalnichevski resolved HTTPCLIENT-2399.
-------------------------------------------
    Fix Version/s: 5.5.1
                   5.6-alpha1
       Resolution: Fixed

> The IdleConnectionEvictor is performing a potentially blocking I/O operation 
> while holding a global lock on the pool
> --------------------------------------------------------------------------------------------------------------------
>
>                 Key: HTTPCLIENT-2399
>                 URL: https://issues.apache.org/jira/browse/HTTPCLIENT-2399
>             Project: HttpComponents HttpClient
>          Issue Type: Bug
>          Components: HttpClient (classic)
>    Affects Versions: 5.4.4, 5.5
>            Reporter: Kiyoshi Iwasaki
>            Priority: Major
>             Fix For: 5.5.1, 5.6-alpha1
>
>
> Hi all
> Please excuse any awkward phrasing in my message, as I am not a native 
> English speaker and am using translation software.
> In HttpClient 5.4.3, I encountered a problem where the IdleConnectionEvictor 
> thread would freeze while holding a lock on the StrictConnPool, making it 
> impossible to obtain a connection. This issue has already been resolved in 
> 5.4.4 and later; however, it remains a concern that the IdleConnectionEvictor 
> is performing a potentially blocking I/O operation while holding a global 
> lock on the pool.
> Here is a portion of the stack trace that occurred when it actually froze in 
> version 5.4.3.
> {code}
> "idle-connection-evictor-1" #326 daemon prio=5 ... runnable ...
>    java.lang.Thread.State: RUNNABLE
>     ....
>     at 
> sun.security.ssl.SSLSocketImpl.close([email protected]/SSLSocketImpl.java:584)
>     at org.apache.hc.core5.io.Closer.close(Closer.java:48)
>     at org.apache.hc.core5.io.Closer.closeQuietly(Closer.java:71)
>     at 
> org.apache.hc.core5.http.impl.io.BHttpConnectionBase.close(BHttpConnectionBase.java:268)
>     at 
> org.apache.hc.core5.http.impl.io.DefaultBHttpClientConnection.close(DefaultBHttpClientConnection.java:71)
>     at 
> org.apache.hc.client5.http.impl.io.DefaultManagedHttpClientConnection.close(DefaultManagedHttpClientConnection.java:176)
>     at 
> org.apache.hc.core5.pool.PoolEntry.discardConnection(PoolEntry.java:180)
>     at 
> org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager.closeIfExpired(PoolingHttpClientConnectionManager.java:650)
>     at 
> org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager$1.lambda$closeExpired$0(PoolingHttpClientConnectionManager.java:228)
>     at 
> org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager$1$$Lambda$3021/0x00007f03a26afb60.execute(Unknown
>  Source)
>     at 
> org.apache.hc.core5.pool.StrictConnPool.enumAvailable(StrictConnPool.java:590)
>     at 
> org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager$1.closeExpired(PoolingHttpClientConnectionManager.java:228)
>     at 
> org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager.closeExpired(PoolingHttpClientConnectionManager.java:542)
>     at 
> org.apache.hc.client5.http.impl.IdleConnectionEvictor.lambda$new$0(IdleConnectionEvictor.java:61)
>     at 
> org.apache.hc.client5.http.impl.IdleConnectionEvictor$$Lambda$2977/0x00007f03a2686b48.run(Unknown
>  Source)
>     at java.lang.Thread.run([email protected]/Thread.java:840)
> {code}
> The `StrictConnPool.enumAvailable()` method executes the callback argument 
> while holding the global lock on the pool.
> Finally, the `Socket.close()` method (a potentially blocking I/O operation) 
> is called via `Closer.close()`.
> I asked about this on the mailing list and received the following response: 
> "This is wrong and needs to be fixed. Please raise a JIRA for this defect."
> * Mailing list: [email protected]
> * Date: September 11
> * Title: IdleConnectionEvictor freezes when holding a StrictConnPool lock in 
> HttpClient 5.4.3



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

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

Reply via email to