ObjectInputStream is not robust with respect to simultaneous access and exception throwing.
Problem:
=======
A JVM crash in interpreter code, doing an array store: we have followed a wild pointer.
A synthesized stack shows two threads doing:
SEGV
interpreter codelet aastore
void java.io.ObjectInputStream$HandleTable.markException(int handle, ClassNotFoundException ex)
readArray
NMethod java/io/ObjectInputStream.readObject0(Z)Ljava/lang/Object; 0xf99d8fe0
NMethod java/io/ObjectInputStream.readObject()Ljava/lang/Object;
NMethod weblogic/common/internal/ChunkedObjectInputStream.readObject()Ljava/lang/Object;
interp weblogic.rjvm.MsgAbbrevInputStream
NMethod weblogic/security/acl/internal/AuthenticatedSubject.doAs(Lweblogic/security/subject/AbstractSubject;Ljava/security/PrivilegedExceptionAction;)Ljava/lang/Object; ...
...
We are reading an object (array) from an ObjectInputStream, both in thread t@53 and t@51, and we appear to be trying to throw a ClassNotFoundException in each.
The two threads are doing their ClassNotFoundException processing on different ObjectInputStreams, and have different java/io/ObjectInputStream$HandleTable objects, but they appear to share a wild pointer in the java/io/ObjectStreamClass .
###@###.### 10/7/04 14:58 GMT
Problem:
=======
A JVM crash in interpreter code, doing an array store: we have followed a wild pointer.
A synthesized stack shows two threads doing:
SEGV
interpreter codelet aastore
void java.io.ObjectInputStream$HandleTable.markException(int handle, ClassNotFoundException ex)
readArray
NMethod java/io/ObjectInputStream.readObject0(Z)Ljava/lang/Object; 0xf99d8fe0
NMethod java/io/ObjectInputStream.readObject()Ljava/lang/Object;
NMethod weblogic/common/internal/ChunkedObjectInputStream.readObject()Ljava/lang/Object;
interp weblogic.rjvm.MsgAbbrevInputStream
NMethod weblogic/security/acl/internal/AuthenticatedSubject.doAs(Lweblogic/security/subject/AbstractSubject;Ljava/security/PrivilegedExceptionAction;)Ljava/lang/Object; ...
...
We are reading an object (array) from an ObjectInputStream, both in thread t@53 and t@51, and we appear to be trying to throw a ClassNotFoundException in each.
The two threads are doing their ClassNotFoundException processing on different ObjectInputStreams, and have different java/io/ObjectInputStream$HandleTable objects, but they appear to share a wild pointer in the java/io/ObjectStreamClass .
###@###.### 10/7/04 14:58 GMT