RFR: 8284632: runtime/Thread/StopAtExit.java possibly leaking memory again
Daniel D.Daugherty
dcubed at openjdk.java.net
Wed Apr 27 14:54:23 UTC 2022
Throwing async exceptions at exiting JavaThreads can leak the exception:
1) HandshakeOperation::do_handshake() recognizes that the target thread
might be terminated, but needs to do some cleanup when the operation
is one that installs an async exception.
2) JavaThread::exit() uses a NoAsyncExceptionDeliveryMark to protect the
VM's call out to Thread::exit() from async exceptions, but it needs to do
some cleanup when those async exceptions cannot be delivered because
the target thread has logically exited.
Also tweaked runtime/Thread/StopAtExit.java to alternate between throwing
RuntimeException and ThreadDeath. The async exception queuing code accepts
any exception, but it recognizes ThreadDeath as special. When a target thread
already has a queued async ThreadDeath exception, then another exception will
not be queued. So the test now throws RuntimeException on odd iterations and
ThreadDeath on even iterations and the target thread will have at most two async
exceptions queued up.
This fix has been tested with Mach5 Tier[1-7] (about to start a Tier8) and I also ran
my StressWrapper_StopAtExit.java test using {release, fastdebug, and slowdebug}
bits for 12 hours per config. No leaks detected. Previously, release bits would
fail with OutOfMemoryException in ~2 minutes with StressWrapper_StopAtExit.java.
-------------
Commit messages:
- 8284632.cr0
Changes: https://git.openjdk.java.net/jdk/pull/8388/files
Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=8388&range=00
Issue: https://bugs.openjdk.java.net/browse/JDK-8284632
Stats: 54 lines in 4 files changed: 43 ins; 3 del; 8 mod
Patch: https://git.openjdk.java.net/jdk/pull/8388.diff
Fetch: git fetch https://git.openjdk.java.net/jdk pull/8388/head:pull/8388
PR: https://git.openjdk.java.net/jdk/pull/8388
More information about the hotspot-runtime-dev
mailing list