You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@xalan.apache.org by Cameron Biggelaar <ca...@vanzyl.com.au> on 2000/07/31 06:09:43 UTC

Solaris Serialization Bug (with the JIT turned on)

Hi,

I want to report a serialization bug, it has been reported previously as 
intermittent (if it's the same one that is) but I can reproduce it in my 
environment. It is only visible under the Solaris JDK with the JIT turned 
on, I have only tested on jdk1.2.2_006.

Essentially I'm using a hashtable to store some user settings and 
persisting the hashtable to disk using Object Serialization.  The object 
hierarchy is as follows:

	Hastable
	|
	|---Custom Object1
	|	|
		|--- Vector
		|	|
			|--Custom Object2
				|	
				|--- Node1
				|--- Node 2

I am only storing a minimal amount of data, 2 Custom Object1's and 2 Custom 
Object2's, the nodes contain around 30 fields each.
On windows 2000 it works fine.  Moving the code to Solaris and then saving 
an entry to this file (new or old) causes a stack overflow error at the 
Node level.  To get around the problem I have implemented the readObject(), 
writeObject() methods and am Serializing the Nodes as Strings.  Upon trying 
to get the stack trace for this report I turned off the JIT on Solaris and 
the problem disappears!  I have not reported this as a bug to Sun.

I have also tried the straight Serialization of a Node or Document under 
Solaris and had no problems.

This bug/issue is no problem for me because I'm using the Hashtable as a 
temporary data store which will be re-implemented later.

I'm Using Windows 2000, JDK1.2.2_006 xalan 1.0, xerces 1.0. to develop on 
(no bug)
I'm using Solaris 2.7 JDK 1.2.2_006 for deployment/testing.


Thanks Cameron

Stack trace is:
java.lang.StackOverflowError at 
java.io.ObjectOutputStream.drain(ObjectOutputStream.java, Compiled Code) at 
java.io.ObjectOutputStream.setBlockData(ObjectOutputStream.java, Compiled 
Code) at 
java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java, 
Compiled Code) at org.apache.xerces.dom.NodeImpl.writeObject(NodeImpl.java, 
Compiled Code) at java.lang.reflect.Method.invoke(Native Method) at 
java.io.ObjectOutputStream.invokeObjectWriter(ObjectOutputStream.java, 
Compiled Code) at 
java.io.ObjectOutputStream.outputObject(ObjectOutputStream.java, Compiled 
Code) at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java, 
Compiled Code) at 
java.io.ObjectOutputStream.outputClassFields(ObjectOutputStream.java, 
Compiled Code) at 
java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java, 
Compiled Code) at org.apache.xerces.dom.NodeImpl.writeObject(NodeImpl.java, 
Compiled Code) at java.lang.reflect.Method.invoke(Native Method) at 
java.io.ObjectOutputStream.invokeObjectWriter(ObjectOutputStream.java, 
Compiled Code) at 
java.io.ObjectOutputStream.outputObject(ObjectOutputStream.java, Compiled 
Code) at

X 20

org.apache.xerces.dom.NodeImpl.writeObject(NodeImpl.java, Compiled Code) at 
java.lang.reflect.Method.invoke(Native Method) at 
java.io.ObjectOutputStream.invokeObjectWriter(ObjectOutputStream.java, 
Compiled Code) at 
java.io.ObjectOutputStream.outputObject(ObjectOutputStream.java, Compiled 
Code) at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java, 
Compiled Code) at 
java.io.ObjectOutputStream.outputClassFields(ObjectOutputStream.java, 
Compiled Code) at 
java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java, 
Compiled Code) at 
org.apache.xerces.dom.NodeContainer.writeObject(NodeContainer.java, 
Compiled Code) at java.lang.reflect.Method.invoke(Native Method) at 
java.io.ObjectOutputStream.invokeObjectWriter(ObjectOutputStream.java, 
Compiled Code) at 
java.io.ObjectOutputStream.outputObject(ObjectOutputStream.java, Compiled 
Code) at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java, 
Compiled Code) at 
java.io.ObjectOutputStream.outputClassFields(ObjectOutputStream.java, 
Compiled Code) at 
java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java, 
Compiled Code) at 
java.io.ObjectOutputStream.outputObject(ObjectOutputStream.java, Compiled 
Code) at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java, 
Compiled Code) at 
java.io.ObjectOutputStream.outputArray(ObjectOutputStream.java, Compiled 
Code) at 
java.io.ObjectOutputStream.checkSubstitutableSpecialClasses(ObjectOutputStream.java, 
Compiled Code) at 
java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java, Compiled 
Code) at 
java.io.ObjectOutputStream.outputClassFields(ObjectOutputStream.java, 
Compiled Code) at 
java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java, 
Compiled Code) at 
java.io.ObjectOutputStream.outputObject(ObjectOutputStream.java, Compiled 
Code) at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java, 
Compiled Code) at 
java.io.ObjectOutputStream.outputClassFields(ObjectOutputStream.java, 
Compiled Code) at 
java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java, 
Compiled Code) at 
java.io.ObjectOutputStream.outputObject(ObjectOutputStream.java, Compiled 
Code) at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java, 
Compiled Code) at 
java.io.ObjectOutputStream.outputArray(ObjectOutputStream.java, Compiled 
Code) at 
java.io.ObjectOutputStream.checkSubstitutableSpecialClasses(ObjectOutputStream.java, 
Compiled Code) at 
java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java, Compiled 
Code) at 
java.io.ObjectOutputStream.outputClassFields(ObjectOutputStream.java, 
Compiled Code) at 
java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java, 
Compiled Code) at 
java.io.ObjectOutputStream.outputObject(ObjectOutputStream.java, Compiled 
Code) at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java, 
Compiled Code) at java.util.Hashtable.writeObject(Hashtable.java, Compiled 
Code) at java.lang.reflect.Method.invoke(Native Method) at 
java.io.ObjectOutputStream.invokeObjectWriter(ObjectOutputStream.java, 
Compiled Code) at 
java.io.ObjectOutputStream.outputObject(ObjectOutputStream.java, Compiled 
Code) at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java, 
Compiled Code) at java.util.Hashtable.writeObject(Hashtable.java, Compiled 
Code) at java.lang.reflect.Method.invoke(Native Method) at 
java.io.ObjectOutputStream.invokeObjectWriter(ObjectOutputStream.java, 
Compiled Code) at 
java.io.ObjectOutputStream.outputObject(ObjectOutputStream.java, Compiled 
Code) at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java, 
Compiled Code) at 
au.com.distinct.utility.CollectionUtil.save(CollectionUtil.java, Compiled 
Code) at 
au.com.distinct.udr.demo.PersistanceService.save(PersistanceService.java, 
Compiled Code)