From 041510dc21df36d9860f4f0048241c2cabb55ee7 Mon Sep 17 00:00:00 2001 From: Alex Menkov Date: Thu, 21 Sep 2023 22:24:24 +0000 Subject: [PATCH] 8315486: vmTestbase/nsk/jdwp/ThreadReference/ForceEarlyReturn/forceEarlyReturn002/forceEarlyReturn002.java timed out Reviewed-by: cjplummer, lmesnik --- .../forceEarlyReturn002.java | 25 +++++++++++++++++-- .../forceEarlyReturn002a.java | 24 ++++++++++++------ 2 files changed, 39 insertions(+), 10 deletions(-) diff --git a/test/hotspot/jtreg/vmTestbase/nsk/jdwp/ThreadReference/ForceEarlyReturn/forceEarlyReturn002/forceEarlyReturn002.java b/test/hotspot/jtreg/vmTestbase/nsk/jdwp/ThreadReference/ForceEarlyReturn/forceEarlyReturn002/forceEarlyReturn002.java index f8ac891b9ff..e66da807669 100644 --- a/test/hotspot/jtreg/vmTestbase/nsk/jdwp/ThreadReference/ForceEarlyReturn/forceEarlyReturn002/forceEarlyReturn002.java +++ b/test/hotspot/jtreg/vmTestbase/nsk/jdwp/ThreadReference/ForceEarlyReturn/forceEarlyReturn002/forceEarlyReturn002.java @@ -139,13 +139,34 @@ public class forceEarlyReturn002 extends TestDebuggerType1 { } } + // get thread ID for "startNewThread" command + private long getNewThreadId() throws Exception { + final String debugeeClassSig = "L" + getDebugeeClassName().replace('.', '/') + ";"; + log.display(" getting classID for " + debugeeClassSig); + long classID = debuggee.getReferenceTypeID(debugeeClassSig); + log.display(" got classID: " + classID); + + log.display(" getting testNewThread field value"); + JDWP.Value value = debuggee.getStaticFieldValue(classID, "testNewThread", JDWP.Tag.THREAD); + + long threadID = ((Long)value.getValue()).longValue(); + log.display(" got threadID: " + threadID); + return threadID; + } + private int createThreadStartEventRequest() { try { + long newThreadId = getNewThreadId(); // create command packet and fill requred out data CommandPacket command = new CommandPacket(JDWP.Command.EventRequest.Set); command.addByte(JDWP.EventKind.THREAD_START); command.addByte(JDWP.SuspendPolicy.ALL); - command.addInt(0); + // we want the THREAD_START event only for the test thread + // and not any others that might be started by debuggee VM, + // so add THREAD_ONLY modifier + command.addInt(1); + command.addByte(JDWP.EventModifierKind.THREAD_ONLY); + command.addObjectID(newThreadId); command.setLength(); transport.write(command); @@ -175,7 +196,7 @@ public class forceEarlyReturn002 extends TestDebuggerType1 { Value value; value = new Value(JDWP.Tag.INT, 0); - // create command with invalid trheadID, expect INVALID_OBJECT error + // create command with invalid threadID, expect INVALID_OBJECT error sendCommand(-1, value, true, JDWP.Error.INVALID_OBJECT); // create StateTestThread diff --git a/test/hotspot/jtreg/vmTestbase/nsk/jdwp/ThreadReference/ForceEarlyReturn/forceEarlyReturn002/forceEarlyReturn002a.java b/test/hotspot/jtreg/vmTestbase/nsk/jdwp/ThreadReference/ForceEarlyReturn/forceEarlyReturn002/forceEarlyReturn002a.java index c6af1dd7811..dc09ffdb7c9 100644 --- a/test/hotspot/jtreg/vmTestbase/nsk/jdwp/ThreadReference/ForceEarlyReturn/forceEarlyReturn002/forceEarlyReturn002a.java +++ b/test/hotspot/jtreg/vmTestbase/nsk/jdwp/ThreadReference/ForceEarlyReturn/forceEarlyReturn002/forceEarlyReturn002a.java @@ -57,14 +57,7 @@ public class forceEarlyReturn002a extends AbstractJDWPDebuggee { return true; } else if (command.equals(COMMAND_START_NEW_THREAD)) { - Thread thread = new Thread(new Runnable() { - public void run() { - log.display("Thread exit"); - } - }); - - thread.setName("forceEarlyReturn002a_NewThread"); - thread.start(); + testNewThread.start(); return true; } @@ -72,6 +65,21 @@ public class forceEarlyReturn002a extends AbstractJDWPDebuggee { return false; } + @Override + protected void init(String args[]) { + super.init(args); + + // create thread for "NewThread" command in advance + testNewThread = new Thread(new Runnable() { + public void run() { + log.display("Thread exit"); + } + }); + testNewThread.setName("forceEarlyReturn002a_NewThread"); + } + + private static Thread testNewThread; + private Thread testThreadInNative; private void stopThreadInNative() {