< 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 >