The test is failing with an ObjectCollectedException. The test hits a
SUSPEND_ALL breakpoint. It then uses JDI to allocate an Object on the debuggee
side:
testedObject = testedClass.newInstance(thread, ctor, params, 0);
Since we are under a SUSPEND_ALL, the object is not initially at risk of
getting GC'd. However, the test then calls invokeMethod() in a loop:
if (method.isStatic()) {
voidValue = (VoidValue) testedClass.invokeMethod(thread,
method, params, 0);
} else {
voidValue = (VoidValue) testedObject.invokeMethod(thread,
method, params, 0);
}
On the first iteration of the loop, invokeMethod() will do a resumeAll() so it
can execute the method on the specified thread. During this time a GC can
happen, and that GC is likely to collect the object that testedObject is
mirroring since it is only weakly kept alive. Then on a subsequent iteration of
the loop, testedObject.invokeMethod() is called again, but this time you get
the ObjectCollectedException because the object that testedObject is mirroring
has been collected. The test needs to add a call to
testedObject.disableCollection() to prevent it from being collected.
I'm not able to reproduce this failure, but the bug is pretty clear. Testing is
in progress. I'll run tier1 CI and also tier2 and tier5 test tasks that run
this test.
-------------
Commit messages:
- call disableCollection() on allocated object so it is not collected during
the invokeMethod() call
Changes: https://git.openjdk.org/jdk/pull/20242/files
Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=20242&range=00
Issue: https://bugs.openjdk.org/browse/JDK-8248609
Stats: 5 lines in 1 file changed: 5 ins; 0 del; 0 mod
Patch: https://git.openjdk.org/jdk/pull/20242.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/20242/head:pull/20242
PR: https://git.openjdk.org/jdk/pull/20242