< prev index next >

src/share/back/debugInit.c

Print this page
rev 11542 : 8049226: com/sun/jdi/OptionTest.java test times out again
Summary: Don't call jni_FatalError if transport initialization fails
Reviewed-by: sspitsyn, sla

*** 1011,1021 **** /* atexit() callback */ static void atexit_finish_logging(void) { /* Normal exit(0) (not _exit()) may only reach here */ ! finish_logging(0); /* Only first call matters */ } static jboolean parseOptions(char *options) { --- 1011,1021 ---- /* atexit() callback */ static void atexit_finish_logging(void) { /* Normal exit(0) (not _exit()) may only reach here */ ! finish_logging(); /* Only first call matters */ } static jboolean parseOptions(char *options) {
*** 1299,1343 **** /* All normal exit doors lead here */ void debugInit_exit(jvmtiError error, const char *msg) { ! int exit_code = 0; ! /* Pick an error code */ ! if ( error != JVMTI_ERROR_NONE ) { ! exit_code = 1; ! if ( docoredump ) { LOG_MISC(("Dumping core as requested by command line")); ! finish_logging(exit_code); abort(); } - } - - if ( msg==NULL ) { - msg = ""; - } ! LOG_MISC(("Exiting with error %s(%d): %s", jvmtiErrorText(error), error, msg)); if (gdata != NULL) { gdata->vmDead = JNI_TRUE; ! ! /* Let's try and cleanup the JVMTI, if we even have one */ ! if ( gdata->jvmti != NULL ) { ! /* Dispose of jvmti (gdata->jvmti becomes NULL) */ disposeEnvironment(gdata->jvmti); } } ! /* Finish up logging. We reach here if JDWP is doing the exiting. */ ! finish_logging(exit_code); /* Only first call matters */ ! /* Let's give the JNI a FatalError if non-exit 0, which is historic way */ ! if ( exit_code != 0 ) { ! JNIEnv *env = NULL; ! jniFatalError(env, msg, error, exit_code); } ! /* Last chance to die, this kills the entire process. */ ! forceExit(exit_code); } --- 1299,1349 ---- /* All normal exit doors lead here */ void debugInit_exit(jvmtiError error, const char *msg) { ! enum exit_codes { EXIT_NO_ERRORS = 0, EXIT_JVMTI_ERROR = 1, EXIT_TRANSPORT_ERROR = 2 }; ! // Prepare to exit. Log error and finish logging ! LOG_MISC(("Exiting with error %s(%d): %s", jvmtiErrorText(error), error, ! ((msg == NULL) ? "" : msg))); ! ! // coredump requested by command line. Keep JVMTI data dirty ! if (error != JVMTI_ERROR_NONE && docoredump) { LOG_MISC(("Dumping core as requested by command line")); ! finish_logging(); abort(); } ! finish_logging(); + // Cleanup the JVMTI if we have one if (gdata != NULL) { gdata->vmDead = JNI_TRUE; ! if (gdata->jvmti != NULL) { ! // Dispose of jvmti (gdata->jvmti becomes NULL) disposeEnvironment(gdata->jvmti); } } ! // We are here with no errors. Kill entire process and exit with zero exit code ! if (error == JVMTI_ERROR_NONE) { ! forceExit(EXIT_NO_ERRORS); ! return; ! } ! // No transport initilized. ! // As we don't have any details here exiting with separate exit code ! if (error == AGENT_ERROR_TRANSPORT_INIT) { ! forceExit(EXIT_TRANSPORT_ERROR); ! return; } ! // We have JVMTI error. Call hotspot jni_FatalError handler ! jniFatalError(NULL, msg, error, EXIT_JVMTI_ERROR); ! ! // hotspot calls os:abort() so we should never reach code below, ! // but guard against possible hotspot changes ! ! // Last chance to die, this kills the entire process. ! forceExit(EXIT_JVMTI_ERROR); }
< prev index next >