Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-4270122

JVMDI_EVENT_VM_DEATH doesn't occur in HotSpot Client VM

XMLWordPrintable

    • 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;
              }
          }
      }

      ======================================================================

            ghirschsunw Gordon Hirsch (Inactive)
            ichebykisunw Igor Chebykin (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: