src/share/vm/prims/whitebox.cpp

Print this page

        

@@ -114,28 +114,40 @@
   return closure.found();
 WB_END
 
 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");
+  {
+    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");
+  {
+    ThreadToNativeFromVM ttnfv(thread);
   env->ReleaseStringUTFChars(segment, seg);
+  }
 #endif
 }
 WB_END