Merge "Make GetErrorName allocate the output buffer."
diff --git a/runtime/openjdkjvmti/OpenjdkJvmTi.cc b/runtime/openjdkjvmti/OpenjdkJvmTi.cc
index 175dca2..faaeff3 100644
--- a/runtime/openjdkjvmti/OpenjdkJvmTi.cc
+++ b/runtime/openjdkjvmti/OpenjdkJvmTi.cc
@@ -1067,8 +1067,15 @@
ENSURE_NON_NULL(name_ptr);
switch (error) {
#define ERROR_CASE(e) case (JVMTI_ERROR_ ## e) : do { \
- *name_ptr = const_cast<char*>("JVMTI_ERROR_"#e); \
- return OK; \
+ jvmtiError res = CopyString(env, \
+ "JVMTI_ERROR_"#e, \
+ reinterpret_cast<unsigned char**>(name_ptr)); \
+ if (res != OK) { \
+ *name_ptr = nullptr; \
+ return res; \
+ } else { \
+ return OK; \
+ } \
} while (false)
ERROR_CASE(NONE);
ERROR_CASE(INVALID_THREAD);
@@ -1120,8 +1127,15 @@
ERROR_CASE(INVALID_ENVIRONMENT);
#undef ERROR_CASE
default: {
- *name_ptr = const_cast<char*>("JVMTI_ERROR_UNKNOWN");
- return ERR(ILLEGAL_ARGUMENT);
+ jvmtiError res = CopyString(env,
+ "JVMTI_ERROR_UNKNOWN",
+ reinterpret_cast<unsigned char**>(name_ptr));
+ if (res != OK) {
+ *name_ptr = nullptr;
+ return res;
+ } else {
+ return ERR(ILLEGAL_ARGUMENT);
+ }
}
}
}
diff --git a/test/903-hello-tagging/tagging.cc b/test/903-hello-tagging/tagging.cc
index 1557d45..60a31bd 100644
--- a/test/903-hello-tagging/tagging.cc
+++ b/test/903-hello-tagging/tagging.cc
@@ -44,6 +44,7 @@
char* err;
jvmti_env->GetErrorName(ret, &err);
printf("Error setting tag: %s\n", err);
+ jvmti_env->Deallocate(reinterpret_cast<unsigned char*>(err));
}
}
@@ -56,6 +57,7 @@
char* err;
jvmti_env->GetErrorName(ret, &err);
printf("Error getting tag: %s\n", err);
+ jvmti_env->Deallocate(reinterpret_cast<unsigned char*>(err));
}
return tag;
}
@@ -90,6 +92,7 @@
char* err;
jvmti_env->GetErrorName(ret, &err);
printf("Failure running GetLoadedClasses: %s\n", err);
+ jvmti_env->Deallocate(reinterpret_cast<unsigned char*>(err));
return nullptr;
}
diff --git a/test/904-object-allocation/tracking.cc b/test/904-object-allocation/tracking.cc
index 9261a9f..f993606 100644
--- a/test/904-object-allocation/tracking.cc
+++ b/test/904-object-allocation/tracking.cc
@@ -69,6 +69,7 @@
char* err;
jvmti_env->GetErrorName(ret, &err);
printf("Error setting callbacks: %s\n", err);
+ jvmti_env->Deallocate(reinterpret_cast<unsigned char*>(err));
}
}
@@ -84,6 +85,7 @@
char* err;
jvmti_env->GetErrorName(ret, &err);
printf("Error enabling/disabling allocation tracking: %s\n", err);
+ jvmti_env->Deallocate(reinterpret_cast<unsigned char*>(err));
}
}
diff --git a/test/905-object-free/tracking_free.cc b/test/905-object-free/tracking_free.cc
index fc43acc..7f295ac 100644
--- a/test/905-object-free/tracking_free.cc
+++ b/test/905-object-free/tracking_free.cc
@@ -50,6 +50,7 @@
char* err;
jvmti_env->GetErrorName(ret, &err);
printf("Error setting callbacks: %s\n", err);
+ jvmti_env->Deallocate(reinterpret_cast<unsigned char*>(err));
}
}
@@ -64,6 +65,7 @@
char* err;
jvmti_env->GetErrorName(ret, &err);
printf("Error enabling/disabling object-free callbacks: %s\n", err);
+ jvmti_env->Deallocate(reinterpret_cast<unsigned char*>(err));
}
}
diff --git a/test/906-iterate-heap/iterate_heap.cc b/test/906-iterate-heap/iterate_heap.cc
index 8dac89d..a2fd591 100644
--- a/test/906-iterate-heap/iterate_heap.cc
+++ b/test/906-iterate-heap/iterate_heap.cc
@@ -61,6 +61,7 @@
char* err;
jvmti_env->GetErrorName(ret, &err);
printf("Failure running IterateThroughHeap: %s\n", err);
+ jvmti_env->Deallocate(reinterpret_cast<unsigned char*>(err));
return false;
}
return true;
diff --git a/test/907-get-loaded-classes/get_loaded_classes.cc b/test/907-get-loaded-classes/get_loaded_classes.cc
index afbb774..36d33b6 100644
--- a/test/907-get-loaded-classes/get_loaded_classes.cc
+++ b/test/907-get-loaded-classes/get_loaded_classes.cc
@@ -48,6 +48,7 @@
char* err;
jvmti_env->GetErrorName(result, &err);
printf("Failure running GetLoadedClasses: %s\n", err);
+ jvmti_env->Deallocate(reinterpret_cast<unsigned char*>(err));
return nullptr;
}
diff --git a/test/908-gc-start-finish/gc_callbacks.cc b/test/908-gc-start-finish/gc_callbacks.cc
index 771d1ad..1fab79d 100644
--- a/test/908-gc-start-finish/gc_callbacks.cc
+++ b/test/908-gc-start-finish/gc_callbacks.cc
@@ -51,6 +51,7 @@
char* err;
jvmti_env->GetErrorName(ret, &err);
printf("Error setting callbacks: %s\n", err);
+ jvmti_env->Deallocate(reinterpret_cast<unsigned char*>(err));
}
}
@@ -65,6 +66,7 @@
char* err;
jvmti_env->GetErrorName(ret, &err);
printf("Error enabling/disabling gc callbacks: %s\n", err);
+ jvmti_env->Deallocate(reinterpret_cast<unsigned char*>(err));
}
ret = jvmti_env->SetEventNotificationMode(
enable ? JVMTI_ENABLE : JVMTI_DISABLE,
@@ -74,6 +76,7 @@
char* err;
jvmti_env->GetErrorName(ret, &err);
printf("Error enabling/disabling gc callbacks: %s\n", err);
+ jvmti_env->Deallocate(reinterpret_cast<unsigned char*>(err));
}
}
diff --git a/test/910-methods/methods.cc b/test/910-methods/methods.cc
index 3ed91d7..b64952d 100644
--- a/test/910-methods/methods.cc
+++ b/test/910-methods/methods.cc
@@ -41,6 +41,7 @@
char* err;
jvmti_env->GetErrorName(result, &err);
printf("Failure running GetMethodName: %s\n", err);
+ jvmti_env->Deallocate(reinterpret_cast<unsigned char*>(err));
return nullptr;
}
@@ -72,6 +73,7 @@
char* err;
jvmti_env->GetErrorName(result2, &err);
printf("Failure running GetMethodName(null, null, null): %s\n", err);
+ jvmti_env->Deallocate(reinterpret_cast<unsigned char*>(err));
return nullptr;
}
@@ -88,6 +90,7 @@
char* err;
jvmti_env->GetErrorName(result, &err);
printf("Failure running GetMethodDeclaringClass: %s\n", err);
+ jvmti_env->Deallocate(reinterpret_cast<unsigned char*>(err));
return nullptr;
}
@@ -104,6 +107,7 @@
char* err;
jvmti_env->GetErrorName(result, &err);
printf("Failure running GetMethodModifiers: %s\n", err);
+ jvmti_env->Deallocate(reinterpret_cast<unsigned char*>(err));
return 0;
}
diff --git a/test/911-get-stack-trace/stack_trace.cc b/test/911-get-stack-trace/stack_trace.cc
index 57f6a92..b3e8bc3 100644
--- a/test/911-get-stack-trace/stack_trace.cc
+++ b/test/911-get-stack-trace/stack_trace.cc
@@ -63,6 +63,7 @@
char* err;
jvmti_env->GetErrorName(result, &err);
printf("Failure running GetStackTrace: %s\n", err);
+ jvmti_env->Deallocate(reinterpret_cast<unsigned char*>(err));
return nullptr;
}
}
@@ -77,6 +78,7 @@
char* err;
jvmti_env->GetErrorName(result2, &err);
printf("Failure running GetMethodName: %s\n", err);
+ jvmti_env->Deallocate(reinterpret_cast<unsigned char*>(err));
return nullptr;
}
}
@@ -94,6 +96,7 @@
char* err;
jvmti_env->GetErrorName(line_result, &err);
printf("Failure running GetLineNumberTable: %s\n", err);
+ jvmti_env->Deallocate(reinterpret_cast<unsigned char*>(err));
return nullptr;
}
line_number_table = nullptr;
diff --git a/test/912-classes/classes.cc b/test/912-classes/classes.cc
index bb3dee1..19d82c5 100644
--- a/test/912-classes/classes.cc
+++ b/test/912-classes/classes.cc
@@ -38,6 +38,7 @@
char* err;
jvmti_env->GetErrorName(result, &err);
printf("Failure running GetClassSignature: %s\n", err);
+ jvmti_env->Deallocate(reinterpret_cast<unsigned char*>(err));
return nullptr;
}
@@ -69,6 +70,7 @@
char* err;
jvmti_env->GetErrorName(result, &err);
printf("Failure running IsInterface: %s\n", err);
+ jvmti_env->Deallocate(reinterpret_cast<unsigned char*>(err));
return JNI_FALSE;
}
return is_interface;
@@ -82,6 +84,7 @@
char* err;
jvmti_env->GetErrorName(result, &err);
printf("Failure running IsArrayClass: %s\n", err);
+ jvmti_env->Deallocate(reinterpret_cast<unsigned char*>(err));
return JNI_FALSE;
}
return is_array_class;
@@ -109,6 +112,7 @@
char* err;
jvmti_env->GetErrorName(result, &err);
printf("Failure running GetClassFields: %s\n", err);
+ jvmti_env->Deallocate(reinterpret_cast<unsigned char*>(err));
return nullptr;
}
@@ -186,6 +190,7 @@
char* err;
jvmti_env->GetErrorName(result, &err);
printf("Failure running GetClassStatus: %s\n", err);
+ jvmti_env->Deallocate(reinterpret_cast<unsigned char*>(err));
return JNI_FALSE;
}
return status;
diff --git a/test/913-heaps/heaps.cc b/test/913-heaps/heaps.cc
index 49ab7dd..0b232af 100644
--- a/test/913-heaps/heaps.cc
+++ b/test/913-heaps/heaps.cc
@@ -49,6 +49,7 @@
char* err;
jvmti_env->GetErrorName(ret, &err);
printf("Error forcing a garbage collection: %s\n", err);
+ jvmti_env->Deallocate(reinterpret_cast<unsigned char*>(err));
}
}
@@ -106,6 +107,7 @@
char* err;
jvmti_env->GetErrorName(ret, &err);
printf("Failure running FollowReferences: %s\n", err);
+ jvmti_env->Deallocate(reinterpret_cast<unsigned char*>(err));
return false;
}
return true;
diff --git a/test/918-fields/fields.cc b/test/918-fields/fields.cc
index c7fca06..4d2b34b 100644
--- a/test/918-fields/fields.cc
+++ b/test/918-fields/fields.cc
@@ -42,6 +42,7 @@
char* err;
jvmti_env->GetErrorName(result, &err);
printf("Failure running GetFieldName: %s\n", err);
+ jvmti_env->Deallocate(reinterpret_cast<unsigned char*>(err));
return nullptr;
}
@@ -73,6 +74,7 @@
char* err;
jvmti_env->GetErrorName(result2, &err);
printf("Failure running GetFieldName(null, null, null): %s\n", err);
+ jvmti_env->Deallocate(reinterpret_cast<unsigned char*>(err));
return nullptr;
}
@@ -89,6 +91,7 @@
char* err;
jvmti_env->GetErrorName(result, &err);
printf("Failure running GetFieldDeclaringClass: %s\n", err);
+ jvmti_env->Deallocate(reinterpret_cast<unsigned char*>(err));
return nullptr;
}
@@ -105,6 +108,7 @@
char* err;
jvmti_env->GetErrorName(result, &err);
printf("Failure running GetFieldModifiers: %s\n", err);
+ jvmti_env->Deallocate(reinterpret_cast<unsigned char*>(err));
return 0;
}
@@ -121,6 +125,7 @@
char* err;
jvmti_env->GetErrorName(result, &err);
printf("Failure running IsFieldSynthetic: %s\n", err);
+ jvmti_env->Deallocate(reinterpret_cast<unsigned char*>(err));
return 0;
}