Моя библиотека на несколько соединений с моими приложениями JNI - PullRequest
0 голосов
/ 04 марта 2011

Я занимаюсь разработкой Java-приложения, которое использует библиотеку c ++. Мой тип приложения - клиент-серверный RCP (на основе подключаемого модуля eclipse). Проблема в том, что когда я пытаюсь подключить более 2 клиентов к моему серверу, он всегда зависает. Что странно, так это то, что эта проблема возникает только при запуске в Windows В Linux все работает нормально.

Хочу также отметить, что программно клиенты представлены потоками C ++. Может быть, они хотят получить доступ к одному и тому же ресурсу. Если я оставляю приложение запущенным, ожидая его разморозки, оно падает и генерирует журнал, показанный ниже


# 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\system32\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 - библиотека, которую я использую

Если у вас есть идеи :) Заранее спасибо.

С уважением, Али.

1 Ответ

0 голосов
/ 04 марта 2011

Собственный код должен присоединиться к jvm с помощью AttachCurrentThread и использовать указатель JNIEnv, предоставляемый этой функцией.Вы не можете просто использовать первый JNIEnv, в который попала ваша c ++ lib.

Кроме того, есть хороший шанс, что библиотека c ++ не поточнобезопасна, не может сказать, не увидев источник.

...