--- old/src/share/vm/prims/whitebox.cpp 2014-11-19 06:00:00.296192145 -0800 +++ new/src/share/vm/prims/whitebox.cpp 2014-11-19 06:00:00.188188157 -0800 @@ -116,24 +116,36 @@ WB_ENTRY(void, WB_AddToBootstrapClassLoaderSearch(JNIEnv* env, jobject o, jstring segment)) { #if INCLUDE_JVMTI - ThreadToNativeFromVM ttnfv(thread); // can't be in VM when we call JNI - const char* seg = env->GetStringUTFChars(segment, NULL); + const char* seg; + { + ThreadToNativeFromVM ttnfv(thread); + seg = env->GetStringUTFChars(segment, NULL); + } JvmtiEnv* jvmti_env = JvmtiEnv::create_a_jvmti(JVMTI_VERSION); jvmtiError err = jvmti_env->AddToBootstrapClassLoaderSearch(seg); assert(err == JVMTI_ERROR_NONE, "must not fail"); - env->ReleaseStringUTFChars(segment, seg); + { + ThreadToNativeFromVM ttnfv(thread); + env->ReleaseStringUTFChars(segment, seg); + } #endif } WB_END WB_ENTRY(void, WB_AddToSystemClassLoaderSearch(JNIEnv* env, jobject o, jstring segment)) { #if INCLUDE_JVMTI - ThreadToNativeFromVM ttnfv(thread); // can't be in VM when we call JNI - const char* seg = env->GetStringUTFChars(segment, NULL); + const char* seg; + { + ThreadToNativeFromVM ttnfv(thread); + seg = env->GetStringUTFChars(segment, NULL); + } JvmtiEnv* jvmti_env = JvmtiEnv::create_a_jvmti(JVMTI_VERSION); jvmtiError err = jvmti_env->AddToSystemClassLoaderSearch(seg); assert(err == JVMTI_ERROR_NONE, "must not fail"); - env->ReleaseStringUTFChars(segment, seg); + { + ThreadToNativeFromVM ttnfv(thread); + env->ReleaseStringUTFChars(segment, seg); + } #endif } WB_END