You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@cxf.apache.org by "Giacomo Carnevale (Jira)" <ji...@apache.org> on 2024/03/15 17:48:00 UTC

[jira] [Created] (CXF-8987) Java 21 - HttpClientHTTPConduit thread locked during shutdown

Giacomo Carnevale created CXF-8987:
--------------------------------------

             Summary: Java 21 - HttpClientHTTPConduit thread locked during shutdown 
                 Key: CXF-8987
                 URL: https://issues.apache.org/jira/browse/CXF-8987
             Project: CXF
          Issue Type: Bug
          Components: Transports
    Affects Versions: 4.0.4, 4.0.3
         Environment: [^thdump2]

*OpenJDK 21.0.2*

*Apache CXF 4.0.4*

*Apache Camel 4.4.1*
            Reporter: Giacomo Carnevale
         Attachments: thdump2

Hi,

I am using Apache CXF client via the Apache Camel CXF connector.

After I updated frm OpenJDK 17.x to OpenJDK 21.0.2, during application shutdown, the following lock occurs:

*at java.lang.Thread.join(java.base@21.0.2/Thread.java:2072)*
    *- locked <0x000000061cd2ab80> (a jdk.internal.net.http.HttpClientImpl$SelectorManager)*
    *at java.lang.Thread.join(java.base@21.0.2/Thread.java:2200)*
    *at jdk.internal.net.http.HttpClientImpl.awaitTermination(java.net.http@21.0.2/HttpClientImpl.java:628)*
    *at java.net.http.HttpClient.{color:#de350b}close{color}(java.net.http@21.0.2/HttpClient.java:900)*
    *at jdk.internal.net.http.HttpClientFacade.{color:#de350b}close{color}(java.net.http@21.0.2/HttpClientFacade.java:192)*
    *at org.apache.cxf.transport.http.HttpClientHTTPConduit.{color:#de350b}close{color}(HttpClientHTTPConduit.java:125)*


HttpClientHTTPConduit.close
{code:java}
public void close() {
    if (client instanceof AutoCloseable) {
        try {
            ((AutoCloseable)client).close();
        } catch (Exception e) {
            //ignore
        }
    } else if (client != null) {
        String name = client.toString();
        client = null;
        tryToShutdownSelector(name);
    }
    defaultAddress = null;
    super.close();
} {code}
 
java.net.HttpClient.close
 
{code:java}
public void close() {
    boolean terminated = isTerminated();
    if (!terminated) {
        shutdown();
        boolean interrupted = false;
        while (!terminated) {
            try {
                terminated = awaitTermination(Duration.ofDays(1L));
            } catch (InterruptedException e) {
                if (!interrupted) {
                    interrupted = true;
                    shutdownNow();
                    if (isTerminated()) break;
                }
            }
        }
        if (interrupted) {
            Thread.currentThread().interrupt();
        }
    }
} {code}
My workaround
{code:java}
public void close() {
    if (client instanceof AutoCloseable) {
        try {
            client.shutdownNow();
            //((AutoCloseable)client).close();
        } catch (Exception e) {
            //ignore
        }
    } else if (client != null) {
        String name = client.toString();
        client = null;
        tryToShutdownSelector(name);
    }
    defaultAddress = null;
    super.close();
} {code}



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