-
Bug
-
Resolution: Duplicate
-
P4
-
None
-
1.3.0
-
sparc
-
solaris_7
Name: icC57033 Date: 09/09/99
Next test case shows that HotSpot Client VM (1.3fcs-E)
for sparc-solaris doesn't generate JVMDI_EVENT_VM_DEATH event.
Steps to reproduce
------------------
1. Compile the attached jvmdi002.c:
% cc -G -KPIC -I<PATH_TO_TESTED_JDK>/../include -I<PATH_TO_TESTED_JDK>/../include/solaris -o libjvmdi002.so jvmdi002.c
2. Compile the attached jvmdi002.java:
% javac jvmdi002.java
3. Run java (don't forget to add path to libjvmdi002.so to LD_LIBRARY_PATH):
% java -version
java version "1.3.0"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.0-E)
Java(TM) HotSpot Client VM (build 1.3beta-E-release, 1.3beta-E-release, interpreted mode)
% java -Xdebug -Xnoagent -Xrunjvmdi002 jvmdi002
Classic VM (win32 and solaris) and HotSpot for win32 will output:
######## JVMDI_EVENT_VM_INIT ########
######## JVMDI_EVENT_VM_DEATH ########
HotSpot Client for solaris will output:
######## JVMDI_EVENT_VM_INIT ########
/*---------------------------- jvmdi002.c ---------------------------*/
/* Ident: @(#)jvmdi002.c 1.1 99/09/08 */
/* Copyright 09/08/99 Sun Microsystems, Inc. All Rights Reserved */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "jvmdi.h"
#ifdef __cplusplus
extern "C" {
#endif
#ifndef JNI_ENV_ARG
#ifdef __cplusplus
#define JNI_ENV_ARG(x,y) y
#define JNI_ENV_PTR(x) x
#else
#define JNI_ENV_ARG(x,y) x,y
#define JNI_ENV_PTR(x) (*x)
#endif
#endif
JavaVM *jvm;
JVMDI_Interface_1 *jvmdi;
jint jniOnLoadVersion = 0;
int printEventEnabled=0;
int was_JVMDI_EVENT_VM_DEATH=0;
#define RETURN_COMPONENT 95
void jvmdi002_printEvent(JNIEnv *env , JVMDI_Event *event);
void jvmdi002_EventHook(JNIEnv *env, JVMDI_Event *event) {
if( event->kind == JVMDI_EVENT_VM_INIT ) {
jvmdi->SetEventNotificationMode(JVMDI_DISABLE
, JVMDI_EVENT_BREAKPOINT, NULL);
jvmdi->SetEventNotificationMode(JVMDI_DISABLE
, JVMDI_EVENT_CLASS_LOAD, NULL);
jvmdi->SetEventNotificationMode(JVMDI_DISABLE
, JVMDI_EVENT_CLASS_PREPARE, NULL);
jvmdi->SetEventNotificationMode(JVMDI_DISABLE
, JVMDI_EVENT_CLASS_UNLOAD, NULL);
jvmdi->SetEventNotificationMode(JVMDI_DISABLE
, JVMDI_EVENT_EXCEPTION, NULL);
jvmdi->SetEventNotificationMode(JVMDI_DISABLE
, JVMDI_EVENT_EXCEPTION_CATCH, NULL);
jvmdi->SetEventNotificationMode(JVMDI_DISABLE
, JVMDI_EVENT_FIELD_ACCESS, NULL);
jvmdi->SetEventNotificationMode(JVMDI_DISABLE
, JVMDI_EVENT_FIELD_MODIFICATION, NULL);
jvmdi->SetEventNotificationMode(JVMDI_DISABLE
, JVMDI_EVENT_FRAME_POP, NULL);
jvmdi->SetEventNotificationMode(JVMDI_DISABLE
, JVMDI_EVENT_METHOD_ENTRY, NULL);
jvmdi->SetEventNotificationMode(JVMDI_DISABLE
, JVMDI_EVENT_METHOD_EXIT, NULL);
jvmdi->SetEventNotificationMode(JVMDI_DISABLE
, JVMDI_EVENT_SINGLE_STEP, NULL);
jvmdi->SetEventNotificationMode(JVMDI_DISABLE
, JVMDI_EVENT_THREAD_END, NULL);
jvmdi->SetEventNotificationMode(JVMDI_DISABLE
, JVMDI_EVENT_USER_DEFINED, NULL);
jvmdi->SetEventNotificationMode(JVMDI_DISABLE
, JVMDI_EVENT_VM_INIT, NULL);
jvmdi->SetEventNotificationMode(JVMDI_ENABLE
, JVMDI_EVENT_VM_DEATH, NULL);
printEventEnabled=1;
jvmdi002_printEvent(env, event);
} else {
if( event->kind == JVMDI_EVENT_VM_DEATH ) {
was_JVMDI_EVENT_VM_DEATH=1;
}
jvmdi002_printEvent(env, event);
}
}
JNIEXPORT jint JNICALL JVM_OnLoad(JavaVM *vm, char *options, void *reserved) {
jint res;
JNIEnv *env;
jvmdiError err;
jvm=vm;
res = JNI_ENV_PTR(jvm)->GetEnv(JNI_ENV_ARG(jvm, (void **) &env), JNI_VERSION_1_2);
if ( res != JNI_OK || env == NULL ) {
printf("Wrong result of a valid call to GetEnv !\n");
return JNI_ERR; /* STATUS_FAIL */
}
res = JNI_ENV_PTR(jvm)->GetEnv(JNI_ENV_ARG(jvm, (void **) &jvmdi), JVMDI_VERSION_1);
if ( res != JNI_OK || env == NULL ) {
printf("Wrong result of a valid call to GetEnv !\n");
return JNI_ERR; /* STATUS_FAIL */
}
err=jvmdi->SetEventHook(jvmdi002_EventHook);
if( err != JVMDI_ERROR_NONE ) {
printf("Can't set jvmdi002_EventHook as event hook.\n");
return JNI_ERR; /* STATUS_FAIL */
}
return JNI_OK;
}
JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) {
return (jniOnLoadVersion = JNI_VERSION_1_2);
}
JNIEXPORT void JNICALL JNI_OnUnload(JavaVM *vm, void *reserved) {
jniOnLoadVersion = JNI_VERSION_1_2;
}
void jvmdi002_printEvent(JNIEnv *env , JVMDI_Event *event) {
if( event->kind == JVMDI_EVENT_VM_DEATH ) {
printf("######## JVMDI_EVENT_VM_DEATH ########\n");
} else if( event->kind == JVMDI_EVENT_VM_INIT ) {
printf("######## JVMDI_EVENT_VM_INIT ########\n");
}
}
#ifdef __cplusplus
}
#endif
/*---------------------------- jvmdi002.java ---------------------------*/
/* Ident: @(#)jvmdi002.java 1.1 99/09/08 */
/* Copyright 09/08/99 Sun Microsystems, Inc. All Rights Reserved */
import java.io.PrintStream;
public class jvmdi002 {
public static void main(String argv[]) {
final int exitCodeBias = 95;
// JCK-compatible exit:
System.exit(run(argv,System.out) + exitCodeBias);
}
public static int run(String argv[],PrintStream out) {
try {
return 0;
} catch (Throwable error) {
error.printStackTrace(out);
return 2;
}
}
}
======================================================================
- duplicates
-
JDK-4248434 Regression: VMDeathEvent doesnt occur in Hotspot 1.0
-
- Closed
-