diff options
author | Sebastien Hertz <shertz@google.com> | 2017-04-10 10:48:21 +0200 |
---|---|---|
committer | Sebastien Hertz <shertz@google.com> | 2017-04-10 17:44:32 +0200 |
commit | f63e3e0dc0bd6dcc531e3cbb2127a5828339dc25 (patch) | |
tree | 6a3586dbf79fbd6d2a22d7489c0afee05cb12fc9 | |
parent | 24c6abe6d0d0ba8e54baa54c0dee484c3060ca70 (diff) | |
download | apache-harmony-f63e3e0dc0bd6dcc531e3cbb2127a5828339dc25.tar.gz |
JDWP: update ReferenceType.InstancesTest
Updates debuggee of test ReferenceType.InstancesTest to make sure
unreachable objects cannot be kept alive by a DEX register in the
stack frame used by the test.
Indeed the last 'new' in a loop can be stored in a DEX register which is
not overwritten after that instruction. To avoid that situation, we move
the allocation of such objects into a separate method.
Bug: 36921933
Test: art/tools/run-jdwp-tests.sh --mode=host --variant=X64
Change-Id: I723a83430121a02470fa8bdcc9af77ec358d4929
-rw-r--r-- | jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/InstancesDebuggee.java | 29 |
1 files changed, 18 insertions, 11 deletions
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/InstancesDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/InstancesDebuggee.java index b165f26..f59adf7 100644 --- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/InstancesDebuggee.java +++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/InstancesDebuggee.java @@ -39,23 +39,30 @@ public class InstancesDebuggee extends SyncDebuggee { @Override public void run() { - //Objects reachable for garbage collection purpose - + // Objects reachable for garbage collection purpose. ArrayList<MockClass> reachableObjs = new ArrayList<MockClass>(); - - for(int i = 0; i < reachableObjNum; i++) { - reachableObjs.add(new MockClass(true)); - } - - //Objects unreachable - for(int i = 0; i < unreachableObjNum; i++) { - new MockClass(false); - } + allocateReachableObjects(reachableObjs); + + // Objects unreachable. + allocateUnreachableObjects(); + synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_READY); logWriter.println("--> Debuggee: InstancesDebuggee..."); synchronizer.receiveMessage(JPDADebuggeeSynchronizer.SGNL_CONTINUE); } + private static void allocateReachableObjects(ArrayList<MockClass> reachableObjs) { + for (int i = 0; i < reachableObjNum; i++) { + reachableObjs.add(new MockClass(true)); + } + } + + private static void allocateUnreachableObjects() { + for (int i = 0; i < unreachableObjNum; i++) { + new MockClass(false); + } + } + public static void main(String[] args) { runDebuggee(InstancesDebuggee.class); } |