src/share/vm/prims/whitebox.cpp

changeset 6346
56cd09c4a5c9
parent 6095
755c423791ab
child 6427
a48e16541e6b
     1.1 --- a/src/share/vm/prims/whitebox.cpp	Fri Feb 28 09:10:55 2014 -0800
     1.2 +++ b/src/share/vm/prims/whitebox.cpp	Wed Feb 12 12:01:45 2014 -0800
     1.3 @@ -316,9 +316,10 @@
     1.4  
     1.5  WB_ENTRY(jint, WB_DeoptimizeMethod(JNIEnv* env, jobject o, jobject method, jboolean is_osr))
     1.6    jmethodID jmid = reflected_method_to_jmid(thread, env, method);
     1.7 +  int result = 0;
     1.8 +  CHECK_JNI_EXCEPTION_(env, result);
     1.9    MutexLockerEx mu(Compile_lock);
    1.10    methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
    1.11 -  int result = 0;
    1.12    nmethod* code;
    1.13    if (is_osr) {
    1.14      int bci = InvocationEntryBci;
    1.15 @@ -344,6 +345,7 @@
    1.16  
    1.17  WB_ENTRY(jboolean, WB_IsMethodCompiled(JNIEnv* env, jobject o, jobject method, jboolean is_osr))
    1.18    jmethodID jmid = reflected_method_to_jmid(thread, env, method);
    1.19 +  CHECK_JNI_EXCEPTION_(env, JNI_FALSE);
    1.20    MutexLockerEx mu(Compile_lock);
    1.21    methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
    1.22    nmethod* code = is_osr ? mh->lookup_osr_nmethod_for(InvocationEntryBci, CompLevel_none, false) : mh->code();
    1.23 @@ -355,6 +357,7 @@
    1.24  
    1.25  WB_ENTRY(jboolean, WB_IsMethodCompilable(JNIEnv* env, jobject o, jobject method, jint comp_level, jboolean is_osr))
    1.26    jmethodID jmid = reflected_method_to_jmid(thread, env, method);
    1.27 +  CHECK_JNI_EXCEPTION_(env, JNI_FALSE);
    1.28    MutexLockerEx mu(Compile_lock);
    1.29    methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
    1.30    if (is_osr) {
    1.31 @@ -366,6 +369,7 @@
    1.32  
    1.33  WB_ENTRY(jboolean, WB_IsMethodQueuedForCompilation(JNIEnv* env, jobject o, jobject method))
    1.34    jmethodID jmid = reflected_method_to_jmid(thread, env, method);
    1.35 +  CHECK_JNI_EXCEPTION_(env, JNI_FALSE);
    1.36    MutexLockerEx mu(Compile_lock);
    1.37    methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
    1.38    return mh->queued_for_compilation();
    1.39 @@ -373,6 +377,7 @@
    1.40  
    1.41  WB_ENTRY(jint, WB_GetMethodCompilationLevel(JNIEnv* env, jobject o, jobject method, jboolean is_osr))
    1.42    jmethodID jmid = reflected_method_to_jmid(thread, env, method);
    1.43 +  CHECK_JNI_EXCEPTION_(env, CompLevel_none);
    1.44    methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
    1.45    nmethod* code = is_osr ? mh->lookup_osr_nmethod_for(InvocationEntryBci, CompLevel_none, false) : mh->code();
    1.46    return (code != NULL ? code->comp_level() : CompLevel_none);
    1.47 @@ -380,6 +385,7 @@
    1.48  
    1.49  WB_ENTRY(void, WB_MakeMethodNotCompilable(JNIEnv* env, jobject o, jobject method, jint comp_level, jboolean is_osr))
    1.50    jmethodID jmid = reflected_method_to_jmid(thread, env, method);
    1.51 +  CHECK_JNI_EXCEPTION(env);
    1.52    methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
    1.53    if (is_osr) {
    1.54      mh->set_not_osr_compilable(comp_level, true /* report */, "WhiteBox");
    1.55 @@ -390,6 +396,7 @@
    1.56  
    1.57  WB_ENTRY(jint, WB_GetMethodEntryBci(JNIEnv* env, jobject o, jobject method))
    1.58    jmethodID jmid = reflected_method_to_jmid(thread, env, method);
    1.59 +  CHECK_JNI_EXCEPTION_(env, InvocationEntryBci);
    1.60    methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
    1.61    nmethod* code = mh->lookup_osr_nmethod_for(InvocationEntryBci, CompLevel_none, false);
    1.62    return (code != NULL && code->is_osr_method() ? code->osr_entry_bci() : InvocationEntryBci);
    1.63 @@ -397,6 +404,7 @@
    1.64  
    1.65  WB_ENTRY(jboolean, WB_TestSetDontInlineMethod(JNIEnv* env, jobject o, jobject method, jboolean value))
    1.66    jmethodID jmid = reflected_method_to_jmid(thread, env, method);
    1.67 +  CHECK_JNI_EXCEPTION_(env, JNI_FALSE);
    1.68    methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
    1.69    bool result = mh->dont_inline();
    1.70    mh->set_dont_inline(value == JNI_TRUE);
    1.71 @@ -414,6 +422,7 @@
    1.72  
    1.73  WB_ENTRY(jboolean, WB_TestSetForceInlineMethod(JNIEnv* env, jobject o, jobject method, jboolean value))
    1.74    jmethodID jmid = reflected_method_to_jmid(thread, env, method);
    1.75 +  CHECK_JNI_EXCEPTION_(env, JNI_FALSE);
    1.76    methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
    1.77    bool result = mh->force_inline();
    1.78    mh->set_force_inline(value == JNI_TRUE);
    1.79 @@ -422,6 +431,7 @@
    1.80  
    1.81  WB_ENTRY(jboolean, WB_EnqueueMethodForCompilation(JNIEnv* env, jobject o, jobject method, jint comp_level, jint bci))
    1.82    jmethodID jmid = reflected_method_to_jmid(thread, env, method);
    1.83 +  CHECK_JNI_EXCEPTION_(env, JNI_FALSE);
    1.84    methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
    1.85    nmethod* nm = CompileBroker::compile_method(mh, bci, comp_level, mh, mh->invocation_count(), "WhiteBox", THREAD);
    1.86    MutexLockerEx mu(Compile_lock);
    1.87 @@ -430,6 +440,7 @@
    1.88  
    1.89  WB_ENTRY(void, WB_ClearMethodState(JNIEnv* env, jobject o, jobject method))
    1.90    jmethodID jmid = reflected_method_to_jmid(thread, env, method);
    1.91 +  CHECK_JNI_EXCEPTION(env);
    1.92    methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
    1.93    MutexLockerEx mu(Compile_lock);
    1.94    MethodData* mdo = mh->method_data();
    1.95 @@ -616,14 +627,18 @@
    1.96          bool result = true;
    1.97          //  one by one registration natives for exception catching
    1.98          jclass exceptionKlass = env->FindClass(vmSymbols::java_lang_NoSuchMethodError()->as_C_string());
    1.99 +        CHECK_JNI_EXCEPTION(env);
   1.100          for (int i = 0, n = sizeof(methods) / sizeof(methods[0]); i < n; ++i) {
   1.101            if (env->RegisterNatives(wbclass, methods + i, 1) != 0) {
   1.102              result = false;
   1.103 -            if (env->ExceptionCheck() && env->IsInstanceOf(env->ExceptionOccurred(), exceptionKlass)) {
   1.104 -              // j.l.NoSuchMethodError is thrown when a method can't be found or a method is not native
   1.105 -              // ignoring the exception
   1.106 -              tty->print_cr("Warning: 'NoSuchMethodError' on register of sun.hotspot.WhiteBox::%s%s", methods[i].name, methods[i].signature);
   1.107 +            jthrowable throwable_obj = env->ExceptionOccurred();
   1.108 +            if (throwable_obj != NULL) {
   1.109                env->ExceptionClear();
   1.110 +              if (env->IsInstanceOf(throwable_obj, exceptionKlass)) {
   1.111 +                // j.l.NoSuchMethodError is thrown when a method can't be found or a method is not native
   1.112 +                // ignoring the exception
   1.113 +                tty->print_cr("Warning: 'NoSuchMethodError' on register of sun.hotspot.WhiteBox::%s%s", methods[i].name, methods[i].signature);
   1.114 +              }
   1.115              } else {
   1.116                // register is failed w/o exception or w/ unexpected exception
   1.117                tty->print_cr("Warning: unexpected error on register of sun.hotspot.WhiteBox::%s%s. All methods will be unregistered", methods[i].name, methods[i].signature);

mercurial