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)