I am developing a java application which uses a c++ library. My application type is an client/server RCP (eclipse plugin based). The problem is when I try to connect more than 2 clients to my server, it always frozes. What is strange is that this problem happens, only when running it in Windows. In Linux, it works fine.
I want to notice also, that, programatically, the clients are represented by C++ threads. May be, they want to access the same resource. If I let the application running, waiting it to defroze, it crashes and generates the log shown below
# An unexpected error has been detected by Java Runtime Environment:
#
# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x6b88cd86, pid=2972, tid=3700
#
# Java VM: Java HotSpot(TM) Client VM (11.2-b01 mixed mode windows-x86)
# Problematic frame:
# C [libtlmdevice_ycp-3-0-0.dll+0x4cd86]
#
# If you would like to submit a bug report, please visit:
# http://java.sun.com/webapps/bugreport/crash.jsp
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#
--------------- T H R E A D ---------------
Current thread (0x637f0800): JavaThread "Thread-4" [_thread_in_native, id=3700, stack(0x687a0000,0x687f0000)]
siginfo: ExceptionCode=0xc0000005, reading address 0x0000000c
Registers:
EAX=0x00000000, EBX=0x6b87b418, ECX=0x003fcd58, EDX=0x00000000
ESP=0x687efaa8, EBP=0x687efaa8, ESI=0x003ffeb8, EDI=0x637f0800
EIP=0x6b88cd86, EFLAGS=0x00010202
Top of Stack: (sp=0x687efaa8)
0x687efaa8: 687efb08 6b86246a 00000000 6b897954
0x687efab8: 00000001 6b87b418 003ffeb8 637f0800
0x687efac8: 687efae8 6b87a97c 688946e8 00000000
0x687efad8: 00000001 00000000 68893500 633b3f02
0x687efae8: 687efb02 6b88d032 00000002 00000000
0x687efaf8: 00000000 6b87b418 003ffeb8 637f0800
0x687efb08: 687efb48 6b87b312 003fcd58 00000002
0x687efb18: 00000000 00000011 687efb58 7c90da1c
Instructions: (pc=0x6b88cd86)
0x6b88cd76: 08 0f b6 45 fc 88 42 08 c9 c3 55 89 e5 8b 45 08
0x6b88cd86: 8b 40 0c 5d c3 90 55 89 e5 53 83 ec 14 8b 45 08
Stack: [0x687a0000,0x687f0000], sp=0x687efaa8, free space=318k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C [libtlmdevice_ycp-3-0-0.dll+0x4cd86]
C [libtlmdevice_ycp-3-0-0.dll+0x2246a]
C [libtlmdevice_ycp-3-0-0.dll+0x3b312]
C [libtlmdevice_ycp-3-0-0.dll+0x3b42c]
C [libtlmdevice_ycp-3-0-0.dll+0x3db81]
C [libtlmdevice_ycp-3-0-0.dll+0x3de1c]
C [libtlmdevice_ycp-3-0-0.dll+0x22f70]
j com.st.tlmdevice.api.TlmdeviceServer.Initialize(Ljava/lang/String;IIII)I+0
j com.st.tlmdevice.api.TlmdeviceServer.run()V+40
v ~StubRoutines::call_stub
Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
j com.st.tlmdevice.api.TlmdeviceServer.Initialize(Ljava/lang/String;IIII)I+0
j com.st.tlmdevice.api.TlmdeviceServer.run()V+40
v ~StubRoutines::call_stub
--------------- P R O C E S S ---------------
Java Threads: ( => current thread )
0x66e52800 JavaThread "Thread-17" [_thread_in_native, id=1324, stack(0x68c30000,0x68c80000)]
0x63063000 JavaThread "Thread-15" [_thread_in_native, id=3060, stack(0x68b30000,0x68b80000)]
0x63035000 JavaThread "Thread-16" [_thread_in_native, id=3720, stack(0x68970000,0x689c0000)]
0x637e5800 JavaThread "Thread-14" [_thread_in_native, id=2672, stack(0x689c0000,0x68a10000)]
0x66da4400 JavaThread "Java Sound Event Dispatcher" daemon [_thread_blocked, id=1532, stack(0x6bf00000,0x6bf50000)]
=>0x637f0800 JavaThread "Thread-4" [_thread_in_native, id=3700, stack(0x687a0000,0x687f0000)]
0x637ec800 JavaThread "Thread-5" [_thread_blocked, id=796, stack(0x68750000,0x687a0000)]
0x66be8c00 JavaThread "Worker-1" [_thread_blocked, id=2016, stack(0x684c0000,0x68510000)]
0x66b67400 JavaThread "Worker-0" [_thread_blocked, id=2336, stack(0x67ac0000,0x67b10000)]
0x63408400 JavaThread "Start Level Event Dispatcher" daemon [_thread_blocked, id=3360, stack(0x63760000,0x637b0000)]
0x633ffc00 JavaThread "Framework Event Dispatcher" daemon [_thread_blocked, id=1268, stack(0x636c0000,0x63710000)]
0x633e6c00 JavaThread "State Data Manager" daemon [_thread_blocked, id=1968, stack(0x63670000,0x636c0000)]
0x63025000 JavaThread "Low Memory Detector" daemon [_thread_blocked, id=3936, stack(0x63270000,0x632c0000)]
0x6301ec00 JavaThread "CompilerThread0" daemon [_thread_blocked, id=468, stack(0x63220000,0x63270000)]
0x6301d400 JavaThread "Attach Listener" daemon [_thread_blocked, id=2560, stack(0x631d0000,0x63220000)]
0x6301c000 JavaThread "Signal Dispatcher" daemon [_thread_blocked, id=2716, stack(0x63180000,0x631d0000)]
0x6300c400 JavaThread "Finalizer" daemon [_thread_blocked, id=456, stack(0x63130000,0x63180000)]
0x63007800 JavaThread "Reference Handler" daemon [_thread_blocked, id=1400, stack(0x630e0000,0x63130000)]
0x003a6c00 JavaThread "main" [_thread_in_native, id=448, stack(0x008c0000,0x00910000)]
Other Threads:
0x63004000 VMThread [stack: 0x63090000,0x630e0000] [id=1424]
0x63038800 WatcherThread [stack: 0x632c0000,0x63310000] [id=2604]
VM state:not at safepoint (normal execution)
VM Mutex/Monitor currently owned by a thread: None
Heap
def new generation total 36352K, used 165K [0x02990000, 0x05100000, 0x07850000)
eden space 32320K, 0% used [0x02990000, 0x029b9740, 0x04920000)
from space 4032K, 0% used [0x04920000, 0x04920000, 0x04d10000)
to space 4032K, 0% used [0x04d10000, 0x04d10000, 0x05100000)
tenured generation total 483968K, used 30304K [0x07850000, 0x250f0000, 0x42990000)
the space 483968K, 6% used [0x07850000, 0x095e83f8, 0x095e8400, 0x250f0000)
compacting perm gen total 28928K, used 28902K [0x42990000, 0x445d0000, 0x62990000)
the space 28928K, 99% used [0x42990000, 0x445c9ac0, 0x445c9c00, 0x445d0000)
No shared spaces configured.
Dynamic libraries:
0x00400000 - 0x00424000 C:\spg\ext_tools\jdk\i686-win5.1\jdk1.6.0_12\jre\bin\javaw.exe
0x7c900000 - 0x7c9af000 C:\WINDOWS\system32\ntdll.dll
0x7c800000 - 0x7c8f6000 C:\WINDOWS\system32\kernel32.dll
0x77dd0000 - 0x77e6b000 C:\WINDOWS\system32\ADVAPI32.dll
0x77e70000 - 0x77f02000 C:\WINDOWS\system32\RPCRT4.dll
0x77fe0000 - 0x77ff1000 C:\WINDOWS\system32\Secur32.dll
0x7e410000 - 0x7e4a1000 C:\WINDOWS\system32\USER32.dll
0x77f10000 - 0x77f59000 C:\WINDOWS\system32\GDI32.dll
0x76390000 - 0x763ad000 C:\WINDOWS\system32\IMM32.DLL
0x7c340000 - 0x7c396000 C:\spg\ext_tools\jdk\i686-win5.1\jdk1.6.0_12\jre\bin\msvcr71.dll
0x6d8b0000 - 0x6db06000 C:\spg\ext_tools\jdk\i686-win5.1\jdk1.6.0_12\jre\bin\client\jvm.dll
0x76b40000 - 0x76b6d000 C:\WINDOWS\system32\WINMM.dll
0x6d340000 - 0x6d348000 C:\spg\ext_tools\jdk\i686-win5.1\jdk1.6.0_12\jre\bin\hpi.dll
0x76bf0000 - 0x76bfb000 C:\WINDOWS\system32\PSAPI.DLL
0x6d860000 - 0x6d86c000 C:\spg\ext_tools\jdk\i686-win5.1\jdk1.6.0_12\jre\bin\verify.dll
0x6d3e0000 - 0x6d3ff000 C:\spg\ext_tools\jdk\i686-win5.1\jdk1.6.0_12\jre\bin\java.dll
0x6d8a0000 - 0x6d8af000 C:\spg\ext_tools\jdk\i686-win5.1\jdk1.6.0_12\jre\bin\zip.dll
0x72000000 - 0x72014000 C:\STM\STWorkbenchR4.1.1\plugins\org.eclipse.equinox.launcher.win32.win32.x86_1.0.101.R34x_v20080731\eclipse_1115.dll
0x773d0000 - 0x774d3000 C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.5512_x-ww_35d4ce83\COMCTL32.dll
0x77c10000 - 0x77c68000 C:\WINDOWS\system32\msvcrt.dll
0x77f60000 - 0x77fd6000 C:\WINDOWS\system32\SHLWAPI.dll
0x77c00000 - 0x77c08000 C:\WINDOWS\system32\VERSION.dll
0x63530000 - 0x63568000 C:\WINDOWS\system32\uxtheme.dll
0x74720000 - 0x7476c000 C:\WINDOWS\system32\MSCTF.dll
0x755c0000 - 0x755ee000 C:\WINDOWS\system32\msctfime.ime
0x774e0000 - 0x7761d000 C:\WINDOWS\system32\ole32.dll
0x68000000 - 0x68036000 C:\WINDOWS\system32\rsaenh.dll
0x769c0000 - 0x76a74000 C:\WINDOWS\system32\USERENV.dll
0x63610000 - 0x63665000 C:\WINDOWS\system32\netapi32.dll
0x6d6c0000 - 0x6d6d3000 C:\spg\ext_tools\jdk\i686-win5.1\jdk1.6.0_12\jre\bin\net.dll
0x71ab0000 - 0x71ac7000 C:\WINDOWS\system32\WS2_32.dll
0x71aa0000 - 0x71aa8000 C:\WINDOWS\system32\WS2HELP.dll
0x71a50000 - 0x71a8f000 C:\WINDOWS\System32\mswsock.dll
0x76f20000 - 0x76f47000 C:\WINDOWS\system32\DNSAPI.dll
0x76fb0000 - 0x76fb8000 C:\WINDOWS\System32\winrnr.dll
0x76f60000 - 0x76f8c000 C:\WINDOWS\system3开发者_Go百科2\WLDAP32.dll
0x76fc0000 - 0x76fc6000 C:\WINDOWS\system32\rasadhlp.dll
0x6d6e0000 - 0x6d6e9000 C:\spg\ext_tools\jdk\i686-win5.1\jdk1.6.0_12\jre\bin\nio.dll
0x673d0000 - 0x67425000 C:\Documents and Settings\turkia\workspace2\.metadata\.plugins\org.eclipse.pde.core\New_configuration\org.eclipse.osgi\bundles\561\1\.cp\swt-win32-3452.dll
0x77120000 - 0x771ab000 C:\WINDOWS\system32\OLEAUT32.dll
0x763b0000 - 0x763f9000 C:\WINDOWS\system32\comdlg32.dll
0x7c9c0000 - 0x7d1d7000 C:\WINDOWS\system32\SHELL32.dll
0x74d90000 - 0x74dfb000 C:\WINDOWS\system32\USP10.dll
0x771b0000 - 0x7727e000 C:\WINDOWS\system32\WININET.dll
0x67440000 - 0x67449000 C:\WINDOWS\system32\Normaliz.dll
0x67450000 - 0x67495000 C:\WINDOWS\system32\iertutil.dll
0x67730000 - 0x67744000 C:\Documents and Settings\turkia\workspace2\.metadata\.plugins\org.eclipse.pde.core\New_configuration\org.eclipse.osgi\bundles\561\1\.cp\swt-gdip-win32-3452.dll
0x67750000 - 0x678f6000 C:\WINDOWS\WinSxS\x86_Microsoft.Windows.GdiPlus_6595b64144ccf1df_1.0.2600.5512_x-ww_dfb54e0c\gdiplus.dll
0x74c80000 - 0x74cac000 C:\WINDOWS\system32\oleacc.dll
0x76080000 - 0x760e5000 C:\WINDOWS\system32\MSVCP60.dll
0x68040000 - 0x68305000 C:\WINDOWS\system32\xpsp2res.dll
0x76380000 - 0x76385000 C:\WINDOWS\system32\msimg32.dll
0x67b10000 - 0x67b1f000 C:\Documents and Settings\turkia\workspace2\.metadata\.plugins\org.eclipse.pde.core\New_configuration\org.eclipse.osgi\bundles\362\1\.cp\jWinHttp.dll
0x67b30000 - 0x67b89000 C:\WINDOWS\system32\WINHTTP.dll
0x76fd0000 - 0x7704f000 C:\WINDOWS\system32\CLBCATQ.DLL
0x77050000 - 0x77115000 C:\WINDOWS\system32\COMRes.dll
0x75cf0000 - 0x75d81000 C:\WINDOWS\system32\mlang.dll
0x70d00000 - 0x70d23000 C:\test\i686-win5.1-gcc_4.1.1_mingw-2-jdk_1.6.0_12-yac_1.2.5\bin\libyacapi.dll
0x6b840000 - 0x6bef9000 C:\test\i686-win5.1-gcc_4.1.1_mingw-2-jdk_1.6.0_12-yac_1.2.5\bin\libtlmdevice_ycp-3-0-0.dll
0x687f0000 - 0x68848000 C:\WINDOWS\system32\hnetcfg.dll
0x73080000 - 0x7309d000 C:\WINDOWS\system32\rsvpsp.dll
0x71a90000 - 0x71a98000 C:\WINDOWS\System32\wshtcpip.dll
0x6d5d0000 - 0x6d5f4000 C:\spg\ext_tools\jdk\i686-win5.1\jdk1.6.0_12\jre\bin\jsound.dll
0x6d600000 - 0x6d608000 C:\spg\ext_tools\jdk\i686-win5.1\jdk1.6.0_12\jre\bin\jsoundds.dll
0x73f10000 - 0x73f6c000 C:\WINDOWS\system32\DSOUND.dll
0x76c30000 - 0x76c5e000 C:\WINDOWS\system32\WINTRUST.dll
0x77a80000 - 0x77b15000 C:\WINDOWS\system32\CRYPT32.dll
0x77b20000 - 0x77b32000 C:\WINDOWS\system32\MSASN1.dll
0x76c90000 - 0x76cb8000 C:\WINDOWS\system32\IMAGEHLP.dll
0x72d20000 - 0x72d29000 C:\WINDOWS\system32\wdmaud.drv
0x72d10000 - 0x72d18000 C:\WINDOWS\system32\msacm32.drv
0x77be0000 - 0x77bf5000 C:\WINDOWS\system32\MSACM32.dll
0x77bd0000 - 0x77bd7000 C:\WINDOWS\system32\midimap.dll
0x73ee0000 - 0x73ee4000 C:\WINDOWS\system32\KsUser.dll
VM Arguments:
jvm_args: -Xms512m -Xmx1g -XX:MaxPermSize=512m -Declipse.pde.launch=true -Dfile.encoding=Cp1252
java_command: org.eclipse.equinox.launcher.Main -launcher C:\STM\STWorkbenchR4.1.1\eclipse.exe -name Eclipse -showsplash 600 -product com.st.platform.st_ide -data C:\Documents and Settings\turkia\workspace2/../runtime-New_configuration -configuration file:C:/Documents and Settings/turkia/workspace2/.metadata/.plugins/org.eclipse.pde.core/New_configuration/ -dev file:C:/Documents and Settings/turkia/workspace2/.metadata/.plugins/org.eclipse.pde.core/New_configuration/dev.properties -os win32 -ws win32 -arch x86 -nl en_US
Launcher Type: SUN_STANDARD
Environment Variables:
PATH=C:/spg/ext_tools/jdk/i686-win5.1/jdk1.6.0_12/bin/../jre/bin/client;C:/spg/ext_tools/jdk/i686-win5.1/jdk1.6.0_12/bin/../jre/bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem
USERNAME=turkia
OS=Windows_NT
PROCESSOR_IDENTIFIER=x86 Family 6 Model 15 Stepping 2, GenuineIntel
--------------- S Y S T E M ---------------
OS: Windows XP Build 2600 Service Pack 3
CPU:total 1 (1 cores per cpu, 1 threads per core) family 6 model 15 stepping 2, cmov, cx8, fxsr, mmx, sse, sse2, sse3, ssse3
Memory: 4k page, physical 2086444k(1045564k free), swap 4024844k(2273736k free)
vm_info: Java HotSpot(TM) Client VM (11.2-b01) for windows-x86 JRE (1.6.0_12-b04), built on Jan 17 2009 09:57:14 by "java_re" with MS VC++ 7.1
time: Thu Mar 03 11:07:22 2011
elapsed time: 334 seconds
libtlmdevice_ycp-3-0-0.dll is the library I am using
If you have any idea :) Thanks in advance.
kind regards, Ali.
The native code needs to attach to the jvm using AttachCurrentThread and use the JNIEnv pointer provided by this function. You cannot just use the first JNIEnv your c++ lib got its hands on.
Also, there's a good chance that the c++ lib isn't thread-safe, can't tell without seeing source.
精彩评论