Forum Stats

  • 3,838,749 Users
  • 2,262,397 Discussions


AttachCurrentThread crash JVM Windows XP, Windows 2000 Ok

854288 Member Posts: 2
edited Apr 12, 2011 4:20AM in Java Native Interface (JNI)
I have a PCI card, that call a DLL and I subscribe a callback in that DLL, when the DLL call my code JNI, AttacCurrentThread and call to JVM.
This code run ok for Windows *2000*, but in Windows XP crash JMV in AttachCurrentThread.
The return value when I call to GetEnv is JNI_EDETACHED and the jvm information error is DuplicatedHandle.

I have been looking for pointer bugs, memory bugs, mallocs without free... but I haven't seen nothing.

The change is de the OS, is and upgrade from Windows *2000* to XP ServicePack 3.
The card driver and DLL is the same for Windows *2000* and Windows XP.

The computer is an Intel Core 2 Duo.

Someone know, if the SO do something diferent that cause the jvm crash,
someone know if the management of processors is different or the management threads...

Sorry, but my level english is low.

Thank you


  • jschellSomeoneStoleMyAlias
    jschellSomeoneStoleMyAlias Member Posts: 24,877 Gold Badge
    Different environment guarantees a different execution path.

    And that is an excellent way to expose pointer bugs that previously did not impact the application.
  • EJP
    EJP Member Posts: 32,920 Gold Crown
    edited Apr 11, 2011 9:19PM

    If there is a return value how can this be a JVM crash? A crash is where an entire exits suddenly, possibly leaving a core dump or crash file of some kind behind it. This sounds like an error return from a JNI API call. In which case you should first consult the documentation for that API.

    Or maybe you got the error from one call and proceeded regardless to call another API which crashed. In which case the answer is (a) don't ignore error codes, and (b) see above.
  • 854288
    854288 Member Posts: 2
    edited Apr 12, 2011 4:20AM
    Yes, it is a JVM crash, I think don't explain it fine, I'm sorry.

    The code call firstable to GetEnv and the return value is JNI_EDETACHED and
    the next call is to AttachCurrentThread, it's in this call when the JVM crash.

    I think that in all the return code, jni functions and third part api function, I'm checking the return value but I'll revise the code.

    I'm going to separate the code to call only the minimal and necesary code to get the callback from the card PCI driver and test this.

    I'll write the result here.


    Edited by: 851285 on 12-abr-2011 1:09
This discussion has been closed.