You are viewing a plain text version of this content. The canonical link for it is here.
Posted to j-users@xerces.apache.org by "Schweigl, Johann" <Jo...@softwareag.com> on 2003/08/06 16:35:46 UTC

Problem with Xerces and threads - any ideas?

Hi all,

I got stuck in a problem I simply can't handle anymore - maybe someone has
experienced a similar situation. 

I have a java program (tried with VMs from 1.4.2 to 1.3.1 on WinXP)  that
uses several threads. One reader thread parses documents and puts the DOM
documents on a queue from where they are fetched from several writer
threads, are serialized and sent to somewhere via http. Queue size is
limited, filling and draining the queue is controlled via Thread.wait() and
Thread.notify(). Parser used is Xerces-J 2.4.0 and, later, 2.5.0.

What happens is that the JVM crashes at some random point in time. Sometimes
only the JVM, sometimes Win XP as a whole. The only case where I got some
useful data was when I ran the whole thing in the Eclipse debugger, which
gave me the dump at the end of the message. I don't know if Xerces really is
the problem here, but I have no clue, so I'm trying to collect input from
everywhere.

The documents in the queue are not accessed concurrently, the put and get
methods of the queue are synchronized and defered node expansion is turned
off. No runtime exception occurs. Thats all what I've got, does it ring
anyone's bell?

Best regards,
Johann


Unexpected Signal : EXCEPTION_ACCESS_VIOLATION (0xc0000005) occurred at
PC=0x809D506
Function=JVM_FindSignal+0x1087A
Library=C:\Programme\Java\j2re1.4.2\bin\client\jvm.dll

Current Java thread:
	at org.apache.xerces.dom.ElementImpl.synchronizeData(Unknown Source)
	at org.apache.xerces.dom.ElementImpl.getNodeName(Unknown Source)
	at
com.softwareag.tamino.db.api.objectModel.dom.TDOMWriter$TElementNodeWriter.w
rite(Unknown Source)
	at
com.softwareag.tamino.db.api.objectModel.dom.TDOMWriter.writeNode(Unknown
Source)
	at
com.softwareag.tamino.db.api.objectModel.dom.TDOMWriter.writeNodeList(Unknow
n Source)
	at
com.softwareag.tamino.db.api.objectModel.dom.TDOMWriter.writeChildNodes(Unkn
own Source)
	at
com.softwareag.tamino.db.api.objectModel.dom.TDOMWriter.access$1200(Unknown
Source)
	at
com.softwareag.tamino.db.api.objectModel.dom.TDOMWriter$TElementNodeWriter.w
rite(Unknown Source)
	at
com.softwareag.tamino.db.api.objectModel.dom.TDOMWriter.writeNode(Unknown
Source)
	at
com.softwareag.tamino.db.api.objectModel.dom.TDOMWriter.writeNodeList(Unknow
n Source)
	at
com.softwareag.tamino.db.api.objectModel.dom.TDOMWriter.writeChildNodes(Unkn
own Source)
	at
com.softwareag.tamino.db.api.objectModel.dom.TDOMWriter.access$1200(Unknown
Source)
	at
com.softwareag.tamino.db.api.objectModel.dom.TDOMWriter$TElementNodeWriter.w
rite(Unknown Source)
	at
com.softwareag.tamino.db.api.objectModel.dom.TDOMWriter.writeNode(Unknown
Source)
	at
com.softwareag.tamino.db.api.objectModel.dom.TDOMWriter.writeNodeList(Unknow
n Source)
	at
com.softwareag.tamino.db.api.objectModel.dom.TDOMWriter.writeChildNodes(Unkn
own Source)
	at
com.softwareag.tamino.db.api.objectModel.dom.TDOMWriter.access$1200(Unknown
Source)
	at
com.softwareag.tamino.db.api.objectModel.dom.TDOMWriter$TElementNodeWriter.w
rite(Unknown Source)
	at
com.softwareag.tamino.db.api.objectModel.dom.TDOMWriter.writeNode(Unknown
Source)
	at
com.softwareag.tamino.db.api.objectModel.dom.TDOMWriter.writeNodeList(Unknow
n Source)
	at
com.softwareag.tamino.db.api.objectModel.dom.TDOMWriter.writeChildNodes(Unkn
own Source)
	at
com.softwareag.tamino.db.api.objectModel.dom.TDOMWriter.access$1200(Unknown
Source)
	at
com.softwareag.tamino.db.api.objectModel.dom.TDOMWriter$TElementNodeWriter.w
rite(Unknown Source)
	at
com.softwareag.tamino.db.api.objectModel.dom.TDOMWriter.writeNode(Unknown
Source)
	at
com.softwareag.tamino.db.api.objectModel.dom.TDOMWriter.writeNodeList(Unknow
n Source)
	at
com.softwareag.tamino.db.api.objectModel.dom.TDOMWriter.writeChildNodes(Unkn
own Source)
	at
com.softwareag.tamino.db.api.objectModel.dom.TDOMWriter.access$1200(Unknown
Source)
	at
com.softwareag.tamino.db.api.objectModel.dom.TDOMWriter$TDocumentNodeWriter.
write(Unknown Source)
	at
com.softwareag.tamino.db.api.objectModel.dom.TDOMWriter.writeNode(Unknown
Source)
	at
com.softwareag.tamino.db.api.objectModel.dom.TDOMWriter.write(Unknown
Source)
	- locked <0x110f0b68> (a
com.softwareag.tamino.db.api.objectModel.dom.TDOMWriter)
	at
com.softwareag.tamino.db.api.objectModel.dom.TDOMAdapter.writeTo(Unknown
Source)
	at
com.softwareag.tamino.db.api.objectModel.dom.TDOMAdapter.writeTo(Unknown
Source)
	at
com.softwareag.tamino.db.api.objectModel.TXMLObject.writeTo(Unknown Source)
	at com.softwareag.tamino.db.api.io.TOutputStreamWriter.write(Unknown
Source)
	at
com.softwareag.tamino.db.api.invocation.http.THTTPInvocationRequestWriter.wr
ite(Unknown Source)
	at
com.softwareag.tamino.db.api.invocation.TInvocationRequestWriter$TCommandIte
mPairWriter.invokeRequestWriter(Unknown Source)
	at
com.softwareag.tamino.db.api.invocation.TInvocationRequestWriter$TCommandIte
mPairWriter.write(Unknown Source)
	at
com.softwareag.tamino.db.api.invocation.TInvocationRequestWriter.write(Unkno
wn Source)
	at
com.softwareag.tamino.db.api.invocation.http.THTTPInvocation.doInvoke(Unknow
n Source)
	at
com.softwareag.tamino.db.api.invocation.TAbstractInvocation.doTemplateInvoke
(Unknown Source)
	- locked <0x127adc90> (a
com.softwareag.tamino.db.api.invocation.http.THTTPInvocation)
	at
com.softwareag.tamino.db.api.invocation.TAbstractInvocation.invoke(Unknown
Source)
	at
com.softwareag.tamino.db.api.accessor.TAbstractAccessor.invoke(Unknown
Source)
	at
com.softwareag.tamino.db.api.accessor.TStreamAccessorImpl.process(Unknown
Source)
	- locked <0x127af1f0> (a
com.softwareag.tamino.db.api.accessor.TStreamAccessorImpl)
	at
com.softwareag.tamino.db.api.accessor.TStreamAccessorImpl.insert(Unknown
Source)
	- locked <0x127af1f0> (a
com.softwareag.tamino.db.api.accessor.TStreamAccessorImpl)
	at
com.softwareag.tamino.db.api.accessor.TXMLObjectAccessorImpl.insert(Unknown
Source)
	- locked <0x127ae880> (a
com.softwareag.tamino.db.api.accessor.TXMLObjectAccessorImpl)
	at Writer.run(Writer.java:48)

Dynamic libraries:
0x00400000 - 0x00407000 	C:\Programme\Java\j2re1.4.2\bin\javaw.exe
0x77F40000 - 0x77FEE000 	C:\WINDOWS\System32\ntdll.dll
0x77E40000 - 0x77F38000 	C:\WINDOWS\system32\kernel32.dll
0x77DA0000 - 0x77E3C000 	C:\WINDOWS\system32\ADVAPI32.dll
0x78000000 - 0x78086000 	C:\WINDOWS\system32\RPCRT4.dll
0x77D10000 - 0x77D9C000 	C:\WINDOWS\system32\USER32.dll
0x77C40000 - 0x77C80000 	C:\WINDOWS\system32\GDI32.dll
0x77BE0000 - 0x77C33000 	C:\WINDOWS\system32\MSVCRT.dll
0x08000000 - 0x08136000
C:\Programme\Java\j2re1.4.2\bin\client\jvm.dll
0x76AF0000 - 0x76B1D000 	C:\WINDOWS\System32\WINMM.dll
0x6BD00000 - 0x6BD0D000 	C:\WINDOWS\System32\SYNCOR11.DLL
0x10000000 - 0x10007000 	C:\Programme\Java\j2re1.4.2\bin\hpi.dll
0x00820000 - 0x0082E000 	C:\Programme\Java\j2re1.4.2\bin\verify.dll
0x00830000 - 0x00848000 	C:\Programme\Java\j2re1.4.2\bin\java.dll
0x00850000 - 0x0085D000 	C:\Programme\Java\j2re1.4.2\bin\zip.dll
0x00910000 - 0x0092C000 	C:\Programme\Java\j2re1.4.2\bin\jdwp.dll
0x06D10000 - 0x06D15000
C:\Programme\Java\j2re1.4.2\bin\dt_socket.dll
0x71A10000 - 0x71A25000 	C:\WINDOWS\System32\ws2_32.dll
0x71A00000 - 0x71A08000 	C:\WINDOWS\System32\WS2HELP.dll
0x719B0000 - 0x719EC000 	C:\WINDOWS\System32\mswsock.dll
0x76EE0000 - 0x76F05000 	C:\WINDOWS\System32\DNSAPI.dll
0x76F70000 - 0x76F77000 	C:\WINDOWS\System32\winrnr.dll
0x76F20000 - 0x76F4D000 	C:\WINDOWS\system32\WLDAP32.dll
0x76F80000 - 0x76F85000 	C:\WINDOWS\System32\rasadhlp.dll
0x719F0000 - 0x719F8000 	C:\WINDOWS\System32\wshtcpip.dll
0x07180000 - 0x0718F000 	C:\Programme\Java\j2re1.4.2\bin\net.dll
0x76C50000 - 0x76C72000 	C:\WINDOWS\system32\imagehlp.dll
0x6DA00000 - 0x6DA7D000 	C:\WINDOWS\system32\DBGHELP.dll
0x77BD0000 - 0x77BD7000 	C:\WINDOWS\system32\VERSION.dll
0x76BB0000 - 0x76BBB000 	C:\WINDOWS\System32\PSAPI.DLL

Heap at VM Abort:
Heap
 def new generation   total 17280K, used 13173K [0x10010000, 0x112d0000,
0x12770000)
  eden space 15360K,  78% used [0x10010000, 0x10bc9548, 0x10f10000)
  from space 1920K,  60% used [0x110f0000, 0x11214080, 0x112d0000)
  to   space 1920K,   0% used [0x10f10000, 0x10f10000, 0x110f0000)
 tenured generation   total 229976K, used 61855K [0x12770000, 0x20806000,
0x30010000)
   the space 229976K,  26% used [0x12770000, 0x163d7d68, 0x163d7e00,
0x20806000)
 compacting perm gen  total 4096K, used 3121K [0x30010000, 0x30410000,
0x34010000)
   the space 4096K,  76% used [0x30010000, 0x3031c410, 0x3031c600,
0x30410000)

Local Time = Tue Aug 05 21:55:32 2003
Elapsed Time = 16091
#
# HotSpot Virtual Machine Error : EXCEPTION_ACCESS_VIOLATION
# Error ID : 4F530E43505002EF
# Please report this error at
# http://java.sun.com/cgi-bin/bugreport.cgi
#
# Java VM: Java HotSpot(TM) Client VM (1.4.2-b28 mixed mode)
#
# An error report file has been saved as hs_err_pid908.log.
# Please refer to the file for further information.
#


---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-j-user-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-j-user-help@xml.apache.org


Re: Problem with Xerces and threads - any ideas?

Posted by Ray Grimmond <ra...@qwan.com>.
Johann,

I do not think this a xerces problem, I think that you have a problem with how
you are synchronizing access to your queue. I have had similar problems in the
past with threads and synchronized objects when I was writing some roll-your-own
synchronized queues. I think it is an out of resource stack/memory problem
caused by recursionand locking,  hence the randomness.

A must read for this sort of programming is Doug Leas' Concurrent Programming in
Java (2nd Edition)  ISBN 020131009

I suggest you replace the queue logic get(), put(), etc with something similar
from Doug Leas's book
to see if the problems go away,

Look at pp 130-131 , try his 2 lock queue called LinkedQueue.

Hope this helps

Ray Grimmond

"Swing XMLEditorKit for Java"    http://www.qwan.com/XML/XMLEditor.html


"Schweigl, Johann" wrote:

> Hi all,
>
> I got stuck in a problem I simply can't handle anymore - maybe someone has
> experienced a similar situation.
>
> I have a java program (tried with VMs from 1.4.2 to 1.3.1 on WinXP)  that
> uses several threads. One reader thread parses documents and puts the DOM
> documents on a queue from where they are fetched from several writer
> threads, are serialized and sent to somewhere via http. Queue size is
> limited, filling and draining the queue is controlled via Thread.wait() and
> Thread.notify(). Parser used is Xerces-J 2.4.0 and, later, 2.5.0.
>
> What happens is that the JVM crashes at some random point in time. Sometimes
> only the JVM, sometimes Win XP as a whole. The only case where I got some
> useful data was when I ran the whole thing in the Eclipse debugger, which
> gave me the dump at the end of the message. I don't know if Xerces really is
> the problem here, but I have no clue, so I'm trying to collect input from
> everywhere.
>
> The documents in the queue are not accessed concurrently, the put and get
> methods of the queue are synchronized and defered node expansion is turned
> off. No runtime exception occurs. Thats all what I've got, does it ring
> anyone's bell?
>
> Best regards,
> Johann


---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-j-user-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-j-user-help@xml.apache.org