JNI, threads are still running after DestroyJavaVM()

Discussion in 'Java' started by Olivier GROSSET-GRANGE, Feb 19, 2013.

  1. Hello all,

    As the object of this thread suggests, the problem I encounter is that
    in a minimalist test program, there are "ghost" threads after calling
    DestroyJavaVM().
    The environment is WIN32, JRE/JDK 1.6.0_21, and C++ (Visual Studio
    2008).
    Under certain circumstances, it prevents some processes from exiting
    (ie: IIS7.5 Application Pool : w3wp.exe).
    May be I'm doing something wrong or I forgot one step,
    Here is the very simple code to reproduce the problem:

    // testDestroyJavaVM.cpp : Defines the entry point for the console
    application.
    //

    #include "stdafx.h"

    #include <conio.h>

    #include "jni.h"
    #pragma comment(lib, "jvm.lib")

    int _tmain(int argc, _TCHAR* argv[])
    {
    printf("press key to start");
    getch();
    printf("\nstart.");
    int MAX = 1; // can't call JNI_CreateJavaVM() more than once for some
    reason...
    for (int i=0; i<MAX; i++)
    {
    JavaVM* jvm = NULL;
    JNIEnv* env = NULL;
    do
    {
    JavaVMOption jvmOptions;
    JavaVMInitArgs vm_args;
    vm_args.version = JNI_VERSION_1_6;
    vm_args.nOptions = 0;
    vm_args.options = &jvmOptions;
    vm_args.ignoreUnrecognized = 1;

    // *** 1 thread before JNI_CreateJavaVM() ***
    int retcode = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);
    // *** 9 threads after JNI_CreateJavaVM() ***
    if(retcode < 0)
    {
    printf("JNI_CreateJavaVM failed: %d\n", retcode);
    break;
    }
    }
    while (false);
    if (NULL != jvm)
    jvm->DestroyJavaVM();
    // *** 6 threads after DestroyJavaVM() ***
    }
    printf("\ndone.");
    getch();
    return 0;
    } // END OF CODE

    Does someone know how to fix this problem please?
    Is it a known problem ?

    Thanks in advance for any help,
    Olivier.
    Olivier GROSSET-GRANGE, Feb 19, 2013
    #1
    1. Advertising

  2. Olivier GROSSET-GRANGE

    Arne Vajhoej Guest

    On 2/19/2013 8:59 AM, Olivier GROSSET-GRANGE wrote:
    > As the object of this thread suggests, the problem I encounter is that
    > in a minimalist test program, there are "ghost" threads after calling
    > DestroyJavaVM().
    > The environment is WIN32, JRE/JDK 1.6.0_21, and C++ (Visual Studio
    > 2008).
    > Under certain circumstances, it prevents some processes from exiting
    > (ie: IIS7.5 Application Pool : w3wp.exe).
    > May be I'm doing something wrong or I forgot one step,
    > Here is the very simple code to reproduce the problem:


    > JavaVMOption jvmOptions;
    > JavaVMInitArgs vm_args;
    > vm_args.version = JNI_VERSION_1_6;
    > vm_args.nOptions = 0;
    > vm_args.options = &jvmOptions;
    > vm_args.ignoreUnrecognized = 1;
    >
    > // *** 1 thread before JNI_CreateJavaVM() ***
    > int retcode = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);
    > // *** 9 threads after JNI_CreateJavaVM() ***


    > if (NULL != jvm)
    > jvm->DestroyJavaVM();
    > // *** 6 threads after DestroyJavaVM() ***


    > Does someone know how to fix this problem please?
    > Is it a known problem ?


    It is documented that non-daemon threads will continue to run
    after DestroyJavaVM is called.

    Do you actually start some Java code that is still running?

    Other than that check the DestroyJavaVM method doc - I seem to
    recall that it should be called with the jvm as argument.

    Arne
    Arne Vajhoej, Feb 19, 2013
    #2
    1. Advertising

  3. Olivier GROSSET-GRANGE

    Guest

    Hello,
    Thanks for the answer.
    No java code is run in this example.
    Fyi,the call to DestroyJavaVM is a c++ like call (which actually calls the riight JNI function with jvm as parameter).
    Best regards,
    Olivier
    , Feb 19, 2013
    #3
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Amit
    Replies:
    0
    Views:
    951
  2. MikL
    Replies:
    1
    Views:
    6,080
    Gordon Beaton
    Feb 15, 2005
  3. zorba
    Replies:
    2
    Views:
    2,377
    zorba
    Mar 22, 2005
  4. Replies:
    1
    Views:
    5,454
    John B. Matthews
    May 1, 2009
  5. Samuel
    Replies:
    2
    Views:
    95
Loading...

Share This Page