-
Bug
-
Resolution: Fixed
-
P2
-
12
-
b25
-
b11
-
x86_64
-
linux
-
Not verified
Issue | Fix Version | Assignee | Priority | Status | Resolution | Resolved In Build |
---|---|---|---|---|---|---|
JDK-8219659 | 12-pool | Sean Coffey | P2 | Closed | Other |
ADDITIONAL SYSTEM INFORMATION :
OS: Linux 64-bit
Linux Kernel: 4.20.10-200.fc29.x86_64
---
openjdk version "12" 2019-03-19
OpenJDK Runtime Environment (build 12+33)
OpenJDK 64-Bit Server VM (build 12+33, mixed mode, sharing)
A DESCRIPTION OF THE PROBLEM :
I was analyzing last remaining WildFly failures against JDK 12 RC and I identified one SSL deadlock we are observing in our test suite.
For some reason thread dump on JDK12 didn't work for me because of some weird maven surefire bug.
In order to identify the root cause of JVM freeze quickly I decided to debug it manually and use debug logs from custom OpenJDK local build.
The issue I identified was introduced in sun.security.ssl.SSLSocketImpl via this commit:
https://github.com/openjdk/jdk/commit/db04b02ec3831f97f2b093c80cde363fd3314af9
To identify the root cause of failure we are observing I used this custom branch built on top of JDK 12 build 33:
https://github.com/ropalka/jdk/commits/ssl-deadlock-analysis
This custom branch helped me to produce debug log (I'm attaching - openjdk.debug) where I discovered this SSL issue.
In the end of that log you can see that in some usecases SSLSocketImpl$AppInputStream.read()
method may hold inner class intrinsic lock when SSLSocketImpl$AppInputStream.deplete() method is being called
and thread invoking that deplete() method will never succeed with inner class intrinsic lock acquisition.
When I remove the deplete() method synchronization everything works for me.
Here's my proposal fix of this issue addressing JDK13 upstream:
https://github.com/ropalka/jdk/commit/d1bbfd126e9bde9d3db0b8b73ee1c60ea93b1dc9
It would be great if that issue could be backported into JDK12 RC too.
REGRESSION : Last worked in version 12
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
git clone https://github.com/wildfly/wildfly-core
cd wildfly-core
mvn clean install -DallTests -DskipTests
export JAVA_HOME=$ORACLE_JDK12
export PATH=$JAVA_HOME/bin:$PATH
cd testsuite/manualmode
mvn clean test -Dtest=**/AuditLogBootingSyslogTest
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
Test passes
ACTUAL -
Test always deadlocks
FREQUENCY : always
OS: Linux 64-bit
Linux Kernel: 4.20.10-200.fc29.x86_64
---
openjdk version "12" 2019-03-19
OpenJDK Runtime Environment (build 12+33)
OpenJDK 64-Bit Server VM (build 12+33, mixed mode, sharing)
A DESCRIPTION OF THE PROBLEM :
I was analyzing last remaining WildFly failures against JDK 12 RC and I identified one SSL deadlock we are observing in our test suite.
For some reason thread dump on JDK12 didn't work for me because of some weird maven surefire bug.
In order to identify the root cause of JVM freeze quickly I decided to debug it manually and use debug logs from custom OpenJDK local build.
The issue I identified was introduced in sun.security.ssl.SSLSocketImpl via this commit:
https://github.com/openjdk/jdk/commit/db04b02ec3831f97f2b093c80cde363fd3314af9
To identify the root cause of failure we are observing I used this custom branch built on top of JDK 12 build 33:
https://github.com/ropalka/jdk/commits/ssl-deadlock-analysis
This custom branch helped me to produce debug log (I'm attaching - openjdk.debug) where I discovered this SSL issue.
In the end of that log you can see that in some usecases SSLSocketImpl$AppInputStream.read()
method may hold inner class intrinsic lock when SSLSocketImpl$AppInputStream.deplete() method is being called
and thread invoking that deplete() method will never succeed with inner class intrinsic lock acquisition.
When I remove the deplete() method synchronization everything works for me.
Here's my proposal fix of this issue addressing JDK13 upstream:
https://github.com/ropalka/jdk/commit/d1bbfd126e9bde9d3db0b8b73ee1c60ea93b1dc9
It would be great if that issue could be backported into JDK12 RC too.
REGRESSION : Last worked in version 12
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
git clone https://github.com/wildfly/wildfly-core
cd wildfly-core
mvn clean install -DallTests -DskipTests
export JAVA_HOME=$ORACLE_JDK12
export PATH=$JAVA_HOME/bin:$PATH
cd testsuite/manualmode
mvn clean test -Dtest=**/AuditLogBootingSyslogTest
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
Test passes
ACTUAL -
Test always deadlocks
FREQUENCY : always
- backported by
-
JDK-8219659 Deadlock in sun.security.ssl.SSLSocketImpl
- Closed
- relates to
-
JDK-8209333 Socket reset issue for TLS 1.3 socket close
- Closed
-
JDK-8219991 New fix of the deadlock in sun.security.ssl.SSLSocketImpl
- Resolved
-
JDK-8219990 Backout JDK-8219658
- Closed
-
JDK-8219955 Intermittent failure of some HTTP Client tests due to 8219658
- Closed