Fix a few issues with 616-cha-unloading.
- Disable test on RI
- Disable test on trace
- Don't try N times for getting the allocation we want, do it
until we get it. We shouldn't get in an infinite loop. If
we do the harness will kill the test.
Test: 616-cha-unloading
bug: 73143991
Change-Id: I1eaf6db1a79010f1e5dc33401e5ccf351ff10be2
diff --git a/test/616-cha-unloading/cha_unload.cc b/test/616-cha-unloading/cha_unload.cc
index 46ceac6..4be3456 100644
--- a/test/616-cha-unloading/cha_unload.cc
+++ b/test/616-cha-unloading/cha_unload.cc
@@ -37,20 +37,16 @@
return static_cast<jlong>(reinterpret_cast<uintptr_t>(method));
}
-extern "C" JNIEXPORT jboolean JNICALL Java_Main_tryReuseArenaOfMethod(JNIEnv*,
- jclass,
- jlong art_method,
- jint tries_count) {
+extern "C" JNIEXPORT void JNICALL Java_Main_reuseArenaOfMethod(JNIEnv*,
+ jclass,
+ jlong art_method) {
// Create a new allocation and use it to request a specified amount of arenas.
// Hopefully one of them is a reused one, the one that covers the art_method pointer.
std::unique_ptr<LinearAlloc> alloc(Runtime::Current()->CreateLinearAlloc());
- for (int i = static_cast<int>(tries_count); i > 0; --i) {
+ do {
// Ask for a byte - it's sufficient to get an arena and not have issues with size.
alloc->Alloc(Thread::Current(), 1);
- }
- bool retval = alloc->Contains(reinterpret_cast<void*>(static_cast<uintptr_t>(art_method)));
-
- return retval;
+ } while (!alloc->Contains(reinterpret_cast<void*>(static_cast<uintptr_t>(art_method))));
}
} // namespace
diff --git a/test/616-cha-unloading/expected.txt b/test/616-cha-unloading/expected.txt
index a71b724..77a1486 100644
--- a/test/616-cha-unloading/expected.txt
+++ b/test/616-cha-unloading/expected.txt
@@ -1,4 +1,2 @@
JNI_OnLoad called
-null
-true
Done
diff --git a/test/616-cha-unloading/src-art/Main.java b/test/616-cha-unloading/src-art/Main.java
index b633a0c..effa315 100644
--- a/test/616-cha-unloading/src-art/Main.java
+++ b/test/616-cha-unloading/src-art/Main.java
@@ -53,12 +53,12 @@
WeakReference<ClassLoader> loader = result.cl;
long methodPtr = result.methodPtr;
// Check that the classloader is indeed unloaded.
- System.out.println(loader.get());
+ if (loader.get() != null) {
+ throw new Error("Expected class loader to be unloaded");
+ }
- // Reuse the linear alloc so old pointers so it becomes invalid.
- boolean ret = tryReuseArenaOfMethod(methodPtr, 10);
- // Check that we indeed reused it.
- System.out.println(ret);
+ // Reuse the linear alloc used by the unloaded class loader.
+ reuseArenaOfMethod(methodPtr);
// Try to JIT-compile under dangerous conditions.
ensureJitCompiled(Main.class, "targetMethodForJit");
@@ -117,5 +117,5 @@
private static native void ensureJitCompiled(Class<?> itf, String method_name);
private static native long getArtMethod(Object javaMethod);
- private static native boolean tryReuseArenaOfMethod(long artMethod, int tries_count);
+ private static native void reuseArenaOfMethod(long artMethod);
}
diff --git a/test/knownfailures.json b/test/knownfailures.json
index 7292280..9f0f954 100644
--- a/test/knownfailures.json
+++ b/test/knownfailures.json
@@ -949,7 +949,17 @@
],
"variant": "jvm",
"bug": "b/73888836",
- "description": ["Failing on JVM. Needs further investigating."]
+ "description": ["Failing on RI. Needs further investigating."]
+ },
+ {
+ "tests": ["616-cha-unloading"],
+ "variant": "jvm",
+ "description": ["Doesn't run on RI."]
+ },
+ {
+ "tests": ["616-cha-unloading"],
+ "variant": "trace",
+ "description": ["Trace prevents class unloading."]
},
{
"tests": "677-fsi",