Fix lock order for jvmti kTaggingLockLevel
Add test for duplicate env free order.
Bug: 36648696
Test: ./test.py --host
Change-Id: I76fc8187b29f5e66cc29674320e887dbc508fe19
diff --git a/test/905-object-free/src/Main.java b/test/905-object-free/src/Main.java
index e41e378..67811c2 100644
--- a/test/905-object-free/src/Main.java
+++ b/test/905-object-free/src/Main.java
@@ -33,6 +33,9 @@
enableFreeTracking(false);
run(l);
+
+ enableFreeTracking(true);
+ stress();
}
private static void run(ArrayList<Object> l) {
@@ -62,6 +65,25 @@
System.out.println("---");
}
+ private static void stress() {
+ getCollectedTags(0);
+ getCollectedTags(1);
+ for (int i = 0; i <= 1000000; ++i) {
+ Object obj = new Object();
+ setTag(obj, i);
+ obj = null; // Clear vreg.
+ }
+ Runtime.getRuntime().gc();
+ long[] freedTags1 = getCollectedTags(0);
+ long[] freedTags2 = getCollectedTags(1);
+ System.out.println("Free counts " + freedTags1.length + " " + freedTags2.length);
+ for (int i = 0; i < freedTags1.length; ++i) {
+ if (freedTags1[i] != freedTags2[i]) {
+ System.out.println("Mismatched tags " + freedTags1[i] + " " + freedTags2[i]);
+ }
+ }
+ }
+
private static void allocate(ArrayList<Object> l, long tag) {
Object obj = new Object();
l.add(obj);
@@ -69,7 +91,7 @@
}
private static void getAndPrintTags() {
- long[] freedTags = getCollectedTags();
+ long[] freedTags = getCollectedTags(0);
Arrays.sort(freedTags);
System.out.println(Arrays.toString(freedTags));
}
@@ -77,5 +99,5 @@
private static native void setupObjectFreeCallback();
private static native void enableFreeTracking(boolean enable);
private static native void setTag(Object o, long tag);
- private static native long[] getCollectedTags();
+ private static native long[] getCollectedTags(int index);
}