RFR: 8356811: Some nsk/jdi tests can fetch ThreadReference from static field in the debuggee: part 4

Alex Menkov amenkov at openjdk.org
Tue May 13 22:15:03 UTC 2025


On Mon, 12 May 2025 19:35:05 GMT, Chris Plummer <cjplummer at openjdk.org> wrote:

> This batch of changes mostly concerns the remaining uses of threadByName() and converting them to use threadByFieldNameOrThrow() or the new threadByFieldName(). The latter is used if the caller has code to handle a null result. The former is when an exception is needed to get the test to terminate properly. I did fix a few long standing cases where threadyByName() was being called and not checking the result. These call sites now use threadByFieldNameOrThrow() instead of threadByFieldName().
> 
> Note there is a minor semantic change in doing this. threadByName() has some extra code to check that the named thread is only found once, and will throw an exception if it is. I think this was just some extra checking that was being done during test development, and is not needed for proper test execution. I've run all the tests without this check and they still pass. I plan on removing this check at some point. 
> 
> Tested by running all tier5 svc tests, which includes the nsk/jdi tests. Also ran tier1 and ran locally.

test/hotspot/jtreg/vmTestbase/nsk/jdi/ClassType/invokeMethod/invokemethod009.java line 120:

> 118:         thrRef = debuggee.threadByFieldName(rType, "testThread", DEBUGGEE_THRNAME);
> 119:         if (thrRef == null) {
> 120:             log.complain("TEST FAILURE: Method Debugee.threadByName() returned null for debuggee thread "

The message mentions old `threadByName`

test/hotspot/jtreg/vmTestbase/nsk/jdi/ClassType/invokeMethod/invokemethod010.java line 119:

> 117:         thrRef = debuggee.threadByFieldName(rType, "testThread", DEBUGGEE_THRNAME);
> 118:         if (thrRef == null) {
> 119:             log.complain("TEST FAILURE: method Debugee.threadByName() returned null for debuggee thread "

Need to update error message

test/hotspot/jtreg/vmTestbase/nsk/jdi/ClassType/invokeMethod/invokemethod014.java line 123:

> 121:             debuggee.threadByFieldName(rType, "testThread", DEBUGGEE_THRNAME);
> 122:         if (thrRef == null) {
> 123:             log.complain("TEST FAILURE: method Debugee.threadByName() returned null for debuggee thread "

Need to update error message

test/hotspot/jtreg/vmTestbase/nsk/jdi/ClassType/newInstance/newinstance009.java line 104:

> 102:         ThreadReference thrRef = debuggee.threadByFieldName(rType, "thread", DEBUGGEE_THRNAME);
> 103:         if (thrRef == null) {
> 104:             log.complain("TEST FAILURE: method Debugee.threadByName() returned null for debuggee thread "

Need to update error message

test/hotspot/jtreg/vmTestbase/nsk/jdi/ObjectReference/invokeMethod/invokemethod003.java line 148:

> 146:         thrRef = debuggee.threadByFieldName(rType[0], "testThread", DEBUGGEE_THRNAME);
> 147:         if (thrRef == null) {
> 148:             log.complain("TEST FAILURE: Method Debugee.threadByName() returned null for debuggee thread "

Need to update error message

test/hotspot/jtreg/vmTestbase/nsk/jdi/ObjectReference/invokeMethod/invokemethod004.java line 118:

> 116:         thrRef = debuggee.threadByFieldName(debuggeeClass, "testThread", DEBUGGEE_THRNAME);
> 117:         if (thrRef == null) {
> 118:             log.complain("TEST FAILURE: method Debugee.threadByName() returned null for debuggee thread "

Need to update error message

test/hotspot/jtreg/vmTestbase/nsk/jdi/ObjectReference/invokeMethod/invokemethod005.java line 122:

> 120:         thrRef = debuggee.threadByFieldName(rType[0], "testThread", DEBUGGEE_THRNAME);
> 121:         if (thrRef == null) {
> 122:             log.complain("TEST FAILURE: Method Debugee.threadByName() returned null for debuggee thread "

Need to update error message

test/hotspot/jtreg/vmTestbase/nsk/jdi/ObjectReference/invokeMethod/invokemethod006.java line 120:

> 118:         thrRef = debuggee.threadByFieldName(rType[0], "testThread", DEBUGGEE_THRNAME);
> 119:         if (thrRef == null) {
> 120:             log.complain("TEST FAILURE: Method Debugee.threadByName() returned null for debuggee thread "

Need to update error message

test/hotspot/jtreg/vmTestbase/nsk/jdi/ObjectReference/invokeMethod/invokemethod007.java line 136:

> 134:         thrRef = debuggee.threadByFieldName(rType[0], "testThread", DEBUGGEE_THRNAME);
> 135:         if (thrRef == null) {
> 136:             log.complain("TEST FAILURE: Method Debugee.threadByName() returned null for debuggee thread "

Need to update error message

test/hotspot/jtreg/vmTestbase/nsk/jdi/ObjectReference/invokeMethod/invokemethod008.java line 131:

> 129:         thrRef = debuggee.threadByFieldName(rType[0], "testThread", DEBUGGEE_THRNAME);
> 130:         if (thrRef == null) {
> 131:             log.complain("TEST FAILURE: Method Debugee.threadByName() returned null for debuggee thread "

Need to update error message

test/hotspot/jtreg/vmTestbase/nsk/jdi/ObjectReference/invokeMethod/invokemethod009.java line 131:

> 129:         thrRef = debuggee.threadByFieldName(rType[0], "testThread", DEBUGGEE_THRNAME);
> 130:         if (thrRef == null) {
> 131:             log.complain("TEST FAILURE: Method Debugee.threadByName() returned null for debuggee thread "

Need to update error message

test/hotspot/jtreg/vmTestbase/nsk/jdi/ObjectReference/invokeMethod/invokemethod014.java line 155:

> 153:             debuggee.threadByFieldName(rType[0], "testThread", DEBUGGEE_THRNAME);
> 154:         if (thrRef == null) {
> 155:             log.complain("TEST FAILURE: method Debugee.threadByName() returned null for debuggee thread "

Need to update error message

test/hotspot/jtreg/vmTestbase/nsk/jdi/ObjectReference/setValue/setvalue002.java line 116:

> 114:         thrRef = debuggee.threadByFieldName(debuggeeClass, "testThread", DEBUGGEE_THRNAME);
> 115:         if (thrRef == null) {
> 116:             log.complain("TEST FAILURE: Method Debugee.threadByName() returned null for debuggee's thread "

Need to update error message

test/hotspot/jtreg/vmTestbase/nsk/jdi/ObjectReference/setValue/setvalue003.java line 149:

> 147:         thrRef = debuggee.threadByFieldName(debuggeeClass, "testThread", DEBUGGEE_THRNAME);
> 148:         if (thrRef == null) {
> 149:             log.complain("TEST FAILURE: Method Debugee.threadByName() returned null for debuggee's thread "

Need to update error message

test/hotspot/jtreg/vmTestbase/nsk/jdi/ObjectReference/setValue/setvalue004.java line 129:

> 127:         thrRef = debuggee.threadByFieldName(debuggeeClass, "testThread", DEBUGGEE_THRNAME);
> 128:         if (thrRef == null) {
> 129:             log.complain("TEST FAILURE: Method Debugee.threadByName() returned null for debuggee's thread "

Need to update error message

test/hotspot/jtreg/vmTestbase/nsk/jdi/ObjectReference/setValue/setvalue005.java line 116:

> 114:         thrRef = debuggee.threadByFieldName(debuggeeClass, "testThread", DEBUGGEE_THRNAME);
> 115:         if (thrRef == null) {
> 116:             log.complain("TEST FAILURE: Method Debugee.threadByName() returned null for debuggee thread "

Need to update error message

test/hotspot/jtreg/vmTestbase/nsk/jdi/ReferenceType/sourceName/sourcename004.java line 145:

> 143:                 debuggee.threadByFieldName(rType, "testThread", DEBUGGEE_THRNAME);
> 144:             if (thrRef == null) {
> 145:                 throw new Failure("method Debugee.threadByName() returned null for debuggee thread "

Need to update error message or use threadByFieldNameOrThrow and drop this check

test/hotspot/jtreg/vmTestbase/nsk/jdi/ReferenceType/sourceNames/sourcenames002.java line 145:

> 143:                 debuggee.threadByFieldName(rType, "testThread", DEBUGGEE_THRNAME);
> 144:             if (thrRef == null) {
> 145:                 throw new Failure("method Debugee.threadByName() returned null for debuggee thread "

Need to update error message or use threadByFieldNameOrThrow and drop this check

test/hotspot/jtreg/vmTestbase/nsk/jdi/StackFrame/getValue/getvalue003.java line 115:

> 113:         ThreadReference auxThread =
> 114:             debuggee.threadByFieldNameOrThrow(rType, "auxThr",
> 115:                                               DEBUGGEE_AUX_THREAD_NAME);

I suppose this should to moved inside try block so `quitDebuggee` is called on error

test/hotspot/jtreg/vmTestbase/nsk/jdi/StackFrame/getValues/getvalues003.java line 121:

> 119:         ThreadReference auxThread =
> 120:             debuggee.threadByFieldNameOrThrow(rType, "auxThr",
> 121:                                               DEBUGGEE_AUX_THREAD_NAME);

Need to move inside `try` block

test/hotspot/jtreg/vmTestbase/nsk/jdi/StackFrame/setValue/setvalue005/setvalue005.java line 165:

> 163:             debuggee.threadByFieldName(rType, "mainThread", DEBUGGEE_THRDNAME);
> 164:         if (thrRef == null) {
> 165:             log.complain("TEST FAILURE: method Debugee.threadByName() returned null for debuggee thread "

Need to update error message
BTW `debuggee.classByName` also can throw exceptions, need to catch and call `quitDebuggee()` (this applicable to other changes in the fix when `debuggee.classByName` is called outside of try block)

test/hotspot/jtreg/vmTestbase/nsk/jdi/StackFrame/setValue/setvalue006/setvalue006.java line 181:

> 179: 
> 180:         // debuggee main class
> 181:         ReferenceType rType = debuggee.classByName(DEBUGGEE_CLASS);

can throw an exception

test/hotspot/jtreg/vmTestbase/nsk/jdi/StackFrame/setValue/setvalue006/setvalue006.java line 186:

> 184:             debuggee.threadByFieldName(rType, "mainThread", DEBUGGEE_THRDNAME);
> 185:         if (thrRef == null) {
> 186:             log.complain("TEST FAILURE: method Debugee.threadByName() returned null for debuggee thread "

Need to update error message

test/hotspot/jtreg/vmTestbase/nsk/jdi/ThreadReference/interrupt/interrupt001.java line 208:

> 206: 
> 207:     private void executeCase(int testCase, String threadName2) {
> 208:         ReferenceType debuggeeClass = debuggee.classByName(debuggeeName);

need to catch exceptions and call `debuggee.quit()`

test/hotspot/jtreg/vmTestbase/nsk/jdi/ThreadReference/ownedMonitors/ownedmonitors002.java line 95:

> 93: 
> 94:         // debuggee main class
> 95:         ReferenceType rType = debuggee.classByName(DEBUGGEE_CLASS);

catch exception and call `quitDebuggee()`

test/hotspot/jtreg/vmTestbase/nsk/jdi/ThreadReference/ownedMonitors/ownedmonitors002.java line 100:

> 98:             debuggee.threadByFieldName(rType, "testThread", DEBUGGEE_THRNAME);
> 99:         if (thrRef == null) {
> 100:             log.complain("TEST FAILURE: method Debugee.threadByName() returned null for debuggee thread "

Need to update the message

test/hotspot/jtreg/vmTestbase/nsk/jdi/ThreadReference/popFrames/popframes006.java line 110:

> 108: 
> 109:         // debuggee main class
> 110:         ReferenceType rType = debuggee.classByName(DEBUGGEE_CLASS);

Need to catch exceptions

test/hotspot/jtreg/vmTestbase/nsk/jdi/ThreadReference/popFrames/popframes006.java line 115:

> 113:             debuggee.threadByFieldName(rType, "testThread", DEBUGGEE_THRNAME);
> 114:         if (thrRef == null) {
> 115:             log.complain("TEST FAILURE: method Debugee.threadByName() returned null for debuggee thread "

Need to update error message

test/hotspot/jtreg/vmTestbase/nsk/jdi/ThreadReference/popFrames/popframes007.java line 110:

> 108: 
> 109:         // debuggee main class
> 110:         ReferenceType rType = debuggee.classByName(DEBUGGEE_CLASS);

Also can throw an exception

test/hotspot/jtreg/vmTestbase/nsk/jdi/ThreadReference/popFrames/popframes007.java line 115:

> 113:             debuggee.threadByFieldName(rType, "mainThread", DEBUGGEE_MAIN_THREAD_NAME);
> 114:         if (mainThread == null) {
> 115:             log.complain("TEST FAILURE: method Debugee.threadByName() returned null for debuggee thread "

error message

test/hotspot/jtreg/vmTestbase/nsk/jdi/ThreadReference/popFrames/popframes007.java line 124:

> 122:             debuggee.threadByFieldName(rType, "auxThr", DEBUGGEE_AUX_THREAD_NAME);
> 123:         if (auxThread == null) {
> 124:             log.complain("TEST FAILURE: method Debugee.threadByName() returned null for debuggee thread "

error message

test/hotspot/jtreg/vmTestbase/nsk/jdi/ThreadReference/stop/stop002.java line 119:

> 117: 
> 118:         // debuggee main class
> 119:         mainClass = debuggee.classByName(DEBUGGEE_CLASS);

Maybe just move this into `try` and replace `debuggee.threadByFieldName` with `debuggee.threadByFieldNameOrThrow`?

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/25190#discussion_r2087642353
PR Review Comment: https://git.openjdk.org/jdk/pull/25190#discussion_r2087645280
PR Review Comment: https://git.openjdk.org/jdk/pull/25190#discussion_r2087646349
PR Review Comment: https://git.openjdk.org/jdk/pull/25190#discussion_r2087648971
PR Review Comment: https://git.openjdk.org/jdk/pull/25190#discussion_r2087656414
PR Review Comment: https://git.openjdk.org/jdk/pull/25190#discussion_r2087657140
PR Review Comment: https://git.openjdk.org/jdk/pull/25190#discussion_r2087657694
PR Review Comment: https://git.openjdk.org/jdk/pull/25190#discussion_r2087658347
PR Review Comment: https://git.openjdk.org/jdk/pull/25190#discussion_r2087659210
PR Review Comment: https://git.openjdk.org/jdk/pull/25190#discussion_r2087659847
PR Review Comment: https://git.openjdk.org/jdk/pull/25190#discussion_r2087662171
PR Review Comment: https://git.openjdk.org/jdk/pull/25190#discussion_r2087663522
PR Review Comment: https://git.openjdk.org/jdk/pull/25190#discussion_r2087664932
PR Review Comment: https://git.openjdk.org/jdk/pull/25190#discussion_r2087677879
PR Review Comment: https://git.openjdk.org/jdk/pull/25190#discussion_r2087678551
PR Review Comment: https://git.openjdk.org/jdk/pull/25190#discussion_r2087678872
PR Review Comment: https://git.openjdk.org/jdk/pull/25190#discussion_r2087683417
PR Review Comment: https://git.openjdk.org/jdk/pull/25190#discussion_r2087684378
PR Review Comment: https://git.openjdk.org/jdk/pull/25190#discussion_r2087686629
PR Review Comment: https://git.openjdk.org/jdk/pull/25190#discussion_r2087688875
PR Review Comment: https://git.openjdk.org/jdk/pull/25190#discussion_r2087689600
PR Review Comment: https://git.openjdk.org/jdk/pull/25190#discussion_r2087694192
PR Review Comment: https://git.openjdk.org/jdk/pull/25190#discussion_r2087693950
PR Review Comment: https://git.openjdk.org/jdk/pull/25190#discussion_r2087697256
PR Review Comment: https://git.openjdk.org/jdk/pull/25190#discussion_r2087698746
PR Review Comment: https://git.openjdk.org/jdk/pull/25190#discussion_r2087698970
PR Review Comment: https://git.openjdk.org/jdk/pull/25190#discussion_r2087701217
PR Review Comment: https://git.openjdk.org/jdk/pull/25190#discussion_r2087701506
PR Review Comment: https://git.openjdk.org/jdk/pull/25190#discussion_r2087702115
PR Review Comment: https://git.openjdk.org/jdk/pull/25190#discussion_r2087702349
PR Review Comment: https://git.openjdk.org/jdk/pull/25190#discussion_r2087702545
PR Review Comment: https://git.openjdk.org/jdk/pull/25190#discussion_r2087705024


More information about the serviceability-dev mailing list