src/hotspot/share/prims/whitebox.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File
*** old/src/hotspot/share/prims/whitebox.cpp	Thu Apr  5 12:03:24 2018
--- new/src/hotspot/share/prims/whitebox.cpp	Thu Apr  5 12:03:24 2018

*** 971,1003 **** --- 971,1003 ---- #endif } WB_END template <typename T> ! static bool GetVMFlag(JavaThread* thread, JNIEnv* env, jstring name, T* value, JVMFlag::Error (*TAt)(const char*, T*, bool, bool)) { if (name == NULL) { return false; } ThreadToNativeFromVM ttnfv(thread); // can't be in VM when we call JNI const char* flag_name = env->GetStringUTFChars(name, NULL); CHECK_JNI_EXCEPTION_(env, false); ! JVMFlag::Error result = (*TAt)(flag_name, value, true, true); env->ReleaseStringUTFChars(name, flag_name); ! return (result == JVMFlag::SUCCESS); } template <typename T> ! static bool SetVMFlag(JavaThread* thread, JNIEnv* env, jstring name, T* value, JVMFlag::Error (*TAtPut)(const char*, T*, JVMFlag::Flags)) { if (name == NULL) { return false; } ThreadToNativeFromVM ttnfv(thread); // can't be in VM when we call JNI const char* flag_name = env->GetStringUTFChars(name, NULL); CHECK_JNI_EXCEPTION_(env, false); ! JVMFlag::Error result = (*TAtPut)(flag_name, value, JVMFlag::INTERNAL); env->ReleaseStringUTFChars(name, flag_name); ! return (result == JVMFlag::SUCCESS); } template <typename T> static jobject box(JavaThread* thread, JNIEnv* env, Symbol* name, Symbol* sig, T value) { ResourceMark rm(thread);
*** 1026,1175 **** --- 1026,1175 ---- }*/ static jobject doubleBox(JavaThread* thread, JNIEnv* env, jdouble value) { return box(thread, env, vmSymbols::java_lang_Double(), vmSymbols::Double_valueOf_signature(), value); } ! static JVMFlag* getVMFlag(JavaThread* thread, JNIEnv* env, jstring name) { ThreadToNativeFromVM ttnfv(thread); // can't be in VM when we call JNI const char* flag_name = env->GetStringUTFChars(name, NULL); CHECK_JNI_EXCEPTION_(env, NULL); ! JVMFlag* result = JVMFlag::find_flag(flag_name, strlen(flag_name), true, true); env->ReleaseStringUTFChars(name, flag_name); return result; } WB_ENTRY(jboolean, WB_IsConstantVMFlag(JNIEnv* env, jobject o, jstring name)) ! JVMFlag* flag = getVMFlag(thread, env, name); return (flag != NULL) && flag->is_constant_in_binary(); WB_END WB_ENTRY(jboolean, WB_IsLockedVMFlag(JNIEnv* env, jobject o, jstring name)) ! JVMFlag* flag = getVMFlag(thread, env, name); return (flag != NULL) && !(flag->is_unlocked() || flag->is_unlocker()); WB_END WB_ENTRY(jobject, WB_GetBooleanVMFlag(JNIEnv* env, jobject o, jstring name)) bool result; ! if (GetVMFlag <bool> (thread, env, name, &result, &CommandLineFlags::boolAt)) { ! if (GetVMFlag <bool> (thread, env, name, &result, &JVMFlag::boolAt)) { ThreadToNativeFromVM ttnfv(thread); // can't be in VM when we call JNI return booleanBox(thread, env, result); } return NULL; WB_END WB_ENTRY(jobject, WB_GetIntVMFlag(JNIEnv* env, jobject o, jstring name)) int result; ! if (GetVMFlag <int> (thread, env, name, &result, &CommandLineFlags::intAt)) { ! if (GetVMFlag <int> (thread, env, name, &result, &JVMFlag::intAt)) { ThreadToNativeFromVM ttnfv(thread); // can't be in VM when we call JNI return longBox(thread, env, result); } return NULL; WB_END WB_ENTRY(jobject, WB_GetUintVMFlag(JNIEnv* env, jobject o, jstring name)) uint result; ! if (GetVMFlag <uint> (thread, env, name, &result, &CommandLineFlags::uintAt)) { ! if (GetVMFlag <uint> (thread, env, name, &result, &JVMFlag::uintAt)) { ThreadToNativeFromVM ttnfv(thread); // can't be in VM when we call JNI return longBox(thread, env, result); } return NULL; WB_END WB_ENTRY(jobject, WB_GetIntxVMFlag(JNIEnv* env, jobject o, jstring name)) intx result; ! if (GetVMFlag <intx> (thread, env, name, &result, &CommandLineFlags::intxAt)) { ! if (GetVMFlag <intx> (thread, env, name, &result, &JVMFlag::intxAt)) { ThreadToNativeFromVM ttnfv(thread); // can't be in VM when we call JNI return longBox(thread, env, result); } return NULL; WB_END WB_ENTRY(jobject, WB_GetUintxVMFlag(JNIEnv* env, jobject o, jstring name)) uintx result; ! if (GetVMFlag <uintx> (thread, env, name, &result, &CommandLineFlags::uintxAt)) { ! if (GetVMFlag <uintx> (thread, env, name, &result, &JVMFlag::uintxAt)) { ThreadToNativeFromVM ttnfv(thread); // can't be in VM when we call JNI return longBox(thread, env, result); } return NULL; WB_END WB_ENTRY(jobject, WB_GetUint64VMFlag(JNIEnv* env, jobject o, jstring name)) uint64_t result; ! if (GetVMFlag <uint64_t> (thread, env, name, &result, &CommandLineFlags::uint64_tAt)) { ! if (GetVMFlag <uint64_t> (thread, env, name, &result, &JVMFlag::uint64_tAt)) { ThreadToNativeFromVM ttnfv(thread); // can't be in VM when we call JNI return longBox(thread, env, result); } return NULL; WB_END WB_ENTRY(jobject, WB_GetSizeTVMFlag(JNIEnv* env, jobject o, jstring name)) uintx result; ! if (GetVMFlag <size_t> (thread, env, name, &result, &CommandLineFlags::size_tAt)) { ! if (GetVMFlag <size_t> (thread, env, name, &result, &JVMFlag::size_tAt)) { ThreadToNativeFromVM ttnfv(thread); // can't be in VM when we call JNI return longBox(thread, env, result); } return NULL; WB_END WB_ENTRY(jobject, WB_GetDoubleVMFlag(JNIEnv* env, jobject o, jstring name)) double result; ! if (GetVMFlag <double> (thread, env, name, &result, &CommandLineFlags::doubleAt)) { ! if (GetVMFlag <double> (thread, env, name, &result, &JVMFlag::doubleAt)) { ThreadToNativeFromVM ttnfv(thread); // can't be in VM when we call JNI return doubleBox(thread, env, result); } return NULL; WB_END WB_ENTRY(jstring, WB_GetStringVMFlag(JNIEnv* env, jobject o, jstring name)) ccstr ccstrResult; ! if (GetVMFlag <ccstr> (thread, env, name, &ccstrResult, &CommandLineFlags::ccstrAt)) { ! if (GetVMFlag <ccstr> (thread, env, name, &ccstrResult, &JVMFlag::ccstrAt)) { ThreadToNativeFromVM ttnfv(thread); // can't be in VM when we call JNI jstring result = env->NewStringUTF(ccstrResult); CHECK_JNI_EXCEPTION_(env, NULL); return result; } return NULL; WB_END WB_ENTRY(void, WB_SetBooleanVMFlag(JNIEnv* env, jobject o, jstring name, jboolean value)) bool result = value == JNI_TRUE ? true : false; ! SetVMFlag <bool> (thread, env, name, &result, &CommandLineFlags::boolAtPut); ! SetVMFlag <bool> (thread, env, name, &result, &JVMFlag::boolAtPut); WB_END WB_ENTRY(void, WB_SetIntVMFlag(JNIEnv* env, jobject o, jstring name, jlong value)) int result = value; ! SetVMFlag <int> (thread, env, name, &result, &CommandLineFlags::intAtPut); ! SetVMFlag <int> (thread, env, name, &result, &JVMFlag::intAtPut); WB_END WB_ENTRY(void, WB_SetUintVMFlag(JNIEnv* env, jobject o, jstring name, jlong value)) uint result = value; ! SetVMFlag <uint> (thread, env, name, &result, &CommandLineFlags::uintAtPut); ! SetVMFlag <uint> (thread, env, name, &result, &JVMFlag::uintAtPut); WB_END WB_ENTRY(void, WB_SetIntxVMFlag(JNIEnv* env, jobject o, jstring name, jlong value)) intx result = value; ! SetVMFlag <intx> (thread, env, name, &result, &CommandLineFlags::intxAtPut); ! SetVMFlag <intx> (thread, env, name, &result, &JVMFlag::intxAtPut); WB_END WB_ENTRY(void, WB_SetUintxVMFlag(JNIEnv* env, jobject o, jstring name, jlong value)) uintx result = value; ! SetVMFlag <uintx> (thread, env, name, &result, &CommandLineFlags::uintxAtPut); ! SetVMFlag <uintx> (thread, env, name, &result, &JVMFlag::uintxAtPut); WB_END WB_ENTRY(void, WB_SetUint64VMFlag(JNIEnv* env, jobject o, jstring name, jlong value)) uint64_t result = value; ! SetVMFlag <uint64_t> (thread, env, name, &result, &CommandLineFlags::uint64_tAtPut); ! SetVMFlag <uint64_t> (thread, env, name, &result, &JVMFlag::uint64_tAtPut); WB_END WB_ENTRY(void, WB_SetSizeTVMFlag(JNIEnv* env, jobject o, jstring name, jlong value)) size_t result = value; ! SetVMFlag <size_t> (thread, env, name, &result, &CommandLineFlags::size_tAtPut); ! SetVMFlag <size_t> (thread, env, name, &result, &JVMFlag::size_tAtPut); WB_END WB_ENTRY(void, WB_SetDoubleVMFlag(JNIEnv* env, jobject o, jstring name, jdouble value)) double result = value; ! SetVMFlag <double> (thread, env, name, &result, &CommandLineFlags::doubleAtPut); ! SetVMFlag <double> (thread, env, name, &result, &JVMFlag::doubleAtPut); WB_END WB_ENTRY(void, WB_SetStringVMFlag(JNIEnv* env, jobject o, jstring name, jstring value)) ThreadToNativeFromVM ttnfv(thread); // can't be in VM when we call JNI const char* ccstrValue;
*** 1182,1192 **** --- 1182,1192 ---- } ccstr ccstrResult = ccstrValue; bool needFree; { ThreadInVMfromNative ttvfn(thread); // back to VM ! needFree = SetVMFlag <ccstr> (thread, env, name, &ccstrResult, &CommandLineFlags::ccstrAtPut); ! needFree = SetVMFlag <ccstr> (thread, env, name, &ccstrResult, &JVMFlag::ccstrAtPut); } if (value != NULL) { env->ReleaseStringUTFChars(value, ccstrValue); } if (needFree) {

src/hotspot/share/prims/whitebox.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File