Thu, 20 Mar 2014 14:25:22 -0700
8034034: [parfait] JNI exc. pending in hotspot/agent/src/os/bsd/MacosxDebuggerLocal.m
Summary: added JNI exception check in the appropriate places
Reviewed-by: sla, zgu
agent/src/os/bsd/MacosxDebuggerLocal.m | file | annotate | diff | comparison | revisions |
1.1 --- a/agent/src/os/bsd/MacosxDebuggerLocal.m Tue Mar 25 19:48:50 2014 -0700 1.2 +++ b/agent/src/os/bsd/MacosxDebuggerLocal.m Thu Mar 20 14:25:22 2014 -0700 1.3 @@ -95,7 +95,9 @@ 1.4 #define CHECK_EXCEPTION_CLEAR_(value) if ((*env)->ExceptionOccurred(env)) { (*env)->ExceptionClear(env); return value; } 1.5 1.6 static void throw_new_debugger_exception(JNIEnv* env, const char* errMsg) { 1.7 - (*env)->ThrowNew(env, (*env)->FindClass(env, "sun/jvm/hotspot/debugger/DebuggerException"), errMsg); 1.8 + jclass exceptionClass = (*env)->FindClass(env, "sun/jvm/hotspot/debugger/DebuggerException"); 1.9 + CHECK_EXCEPTION; 1.10 + (*env)->ThrowNew(env, exceptionClass, errMsg); 1.11 } 1.12 1.13 static struct ps_prochandle* get_proc_handle(JNIEnv* env, jobject this_obj) { 1.14 @@ -129,6 +131,7 @@ 1.15 JNIEXPORT void JNICALL 1.16 Java_sun_jvm_hotspot_debugger_bsd_BsdDebuggerLocal_init0(JNIEnv *env, jclass cls) { 1.17 symbolicatorID = (*env)->GetFieldID(env, cls, "symbolicator", "J"); 1.18 + CHECK_EXCEPTION; 1.19 taskID = (*env)->GetFieldID(env, cls, "task", "J"); 1.20 CHECK_EXCEPTION; 1.21 1.22 @@ -236,13 +239,16 @@ 1.23 (JNIEnv *env, jobject this_obj, jlong addr) { 1.24 uintptr_t offset; 1.25 const char* sym = NULL; 1.26 + jstring sym_string; 1.27 1.28 struct ps_prochandle* ph = get_proc_handle(env, this_obj); 1.29 if (ph != NULL && ph->core != NULL) { 1.30 sym = symbol_for_pc(ph, (uintptr_t) addr, &offset); 1.31 if (sym == NULL) return 0; 1.32 + sym_string = (*env)->NewStringUTF(env, sym); 1.33 + CHECK_EXCEPTION_(0); 1.34 return (*env)->CallObjectMethod(env, this_obj, createClosestSymbol_ID, 1.35 - (*env)->NewStringUTF(env, sym), (jlong)offset); 1.36 + sym_string, (jlong)offset); 1.37 } 1.38 return 0; 1.39 } 1.40 @@ -749,11 +755,14 @@ 1.41 const char* name; 1.42 jobject loadObject; 1.43 jobject loadObjectList; 1.44 + jstring nameString; 1.45 1.46 base = get_lib_base(ph, i); 1.47 name = get_lib_name(ph, i); 1.48 + nameString = (*env)->NewStringUTF(env, name); 1.49 + CHECK_EXCEPTION; 1.50 loadObject = (*env)->CallObjectMethod(env, this_obj, createLoadObject_ID, 1.51 - (*env)->NewStringUTF(env, name), (jlong)0, (jlong)base); 1.52 + nameString, (jlong)0, (jlong)base); 1.53 CHECK_EXCEPTION; 1.54 loadObjectList = (*env)->GetObjectField(env, this_obj, loadObjectList_ID); 1.55 CHECK_EXCEPTION;