mturk       2002/10/24 08:37:18

  Modified:    jk/native2/common jk_vm_default.c
  Log:
  After guessing JVM check if the file is inside the
  LD_LIBRARY_PATH.
  
  Revision  Changes    Path
  1.23      +53 -6     jakarta-tomcat-connectors/jk/native2/common/jk_vm_default.c
  
  Index: jk_vm_default.c
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/common/jk_vm_default.c,v
  retrieving revision 1.22
  retrieving revision 1.23
  diff -u -r1.22 -r1.23
  --- jk_vm_default.c   15 Oct 2002 13:59:49 -0000      1.22
  +++ jk_vm_default.c   24 Oct 2002 15:37:18 -0000      1.23
  @@ -184,6 +184,24 @@
   }
   #endif
   
  +/* JVM hooks */
  +static int jk2_jni_error_signaled = JK_FALSE;
  +static int jk2_jni_error_code = 0;
  +static int jk2_jni_abort_signaled = JK_FALSE;
  +
  +static void jk2_jni_error_hook(int code)
  +{
  +    jk2_jni_error_signaled = JK_TRUE;
  +    jk2_jni_error_code = code;
  +    
  +    fprintf(stderr, "JVM error hook called %d\n", code);
  +}
  +
  +static void jk2_jni_abort_hook()
  +{
  +    jk2_jni_abort_signaled = JK_TRUE;    
  +    fprintf(stderr, "JVM abort hook\n");
  +} 
   
   /** Load the VM. Must be called after init.
    */
  @@ -400,9 +418,33 @@
                                              (char *)p->pstrdup( env, p, *current ) );
   
           if( jvm!=NULL && jk2_file_exists(env, jvm)) {
  +            char *ldlib;
  +            env->l->jkLog(env, env->l, JK_LOG_INFO,
  +                         "jni.guessJvmDll() trying %s\n", jvm);
  +            /* Check if the LD_LIBRARY_PATH points to the discovered jvm.
  +             * XXX only tested on Linux.
  +             */
  +            ldlib = getenv("LD_LIBRARY_PATH");
  +            if (ldlib && strlen(ldlib)) {
  +                char *token;
  +                
  +                token = strtok(ldlib, ":");
  +                while (token != NULL) {
  +                    if (strncmp(token, jvm, strlen(token)) == 0) {
  +                        env->l->jkLog(env, env->l, JK_LOG_INFO,
  +                                      "jni.guessJvmDll() found %s in %s.\n", jvm, 
token);
  +                        return jvm;
  +                    } 
  +                    token = strtok(NULL, ":");                   
  +                }
  +                env->l->jkLog(env, env->l, JK_LOG_INFO,
  +                              "jni.guessJvmDll() could not find %s in the 
LD_LIBRARY_PATH\n",
  +                              jvm);
  +                return NULL;                                    
  +            }
               env->l->jkLog(env, env->l, JK_LOG_INFO,
  -                          "jni.guessJvmDll() %s\n", jvm);
  -            return jvm;
  +                          "jni.guessJvmDll() LD_LIBRARY_PATH environment var is not 
set\n");
  +            return NULL;                                
           }
   
           env->l->jkLog(env, env->l, JK_LOG_INFO,
  @@ -485,8 +527,6 @@
           return JK_ERR;
       }
   
  -    vm_args.version = JNI_VERSION_1_2;
  -    vm_args.options = options;
       for (classn = 0; classn < jkvm->nClasspath; classn++)
           classl += strlen(jkvm->classpath[classn]);
       if (classl) {
  @@ -513,9 +553,16 @@
                             "vm.openJvm2() Classpath: %s\n", classpath);
           options[optn++].optionString = classpath;
       }
  -
  -    vm_args.nOptions = optn;
       
  +    /* Set the abort and exit hooks */
  +    options[optn].optionString = "exit";
  +    options[optn++].extraInfo = jk2_jni_error_hook;
  +    options[optn].optionString = "abort";
  +    options[optn++].extraInfo = jk2_jni_abort_hook;
  +    
  +    vm_args.version = JNI_VERSION_1_2;
  +    vm_args.options = options;
  +    vm_args.nOptions = optn;    
       vm_args.ignoreUnrecognized = JNI_TRUE;
   
       err=jni_create_java_vm(&jvm, &penv, &vm_args);
  
  
  

--
To unsubscribe, e-mail:   <mailto:tomcat-dev-unsubscribe@;jakarta.apache.org>
For additional commands, e-mail: <mailto:tomcat-dev-help@;jakarta.apache.org>

Reply via email to