Re: ODFDOM 0.7.0 JVM Dump
- From: Svante Schubert <Svante.Schubert@Sun.COM>
- To: issues@odftoolkit.odftoolkit.org, lists@datanucleus.org
- Subject: Re: ODFDOM 0.7.0 JVM Dump
- Date: Wed, 30 Sep 2009 10:58:54 +0200
Thanks for sharing the test file.
I can reproduce a problem on my Macbook:
Invalid memory access of location 0xff02a eip=0x94446
/bin/sh: line 1: 86790 Bus error
We will invest further using your file as test base, created issue
https://odftoolkit.org/bugzilla/show_bug.cgi?id=104
Thanks again,
Svante
lists@datanucleus.org wrote:
In migrating the DataNucleus JDO/JPA wrapper to ODF from 0.6.16 to
0.7.0 I find the following case results in a JVM dump. Try running the
following Main
package org.datanucleus.test;
import java.io.File;
import java.io.FileOutputStream;
import org.odftoolkit.odfdom.OdfFileDom;
import org.odftoolkit.odfdom.doc.OdfDocument;
import org.odftoolkit.odfdom.doc.OdfSpreadsheetDocument;
import org.odftoolkit.odfdom.doc.office.OdfOfficeAutomaticStyles;
import org.odftoolkit.odfdom.doc.style.OdfStyle;
import org.odftoolkit.odfdom.doc.table.OdfTable;
import org.odftoolkit.odfdom.doc.table.OdfTableRow;
import org.odftoolkit.odfdom.dom.OdfNamespaceNames;
import org.odftoolkit.odfdom.dom.style.OdfStyleFamily;
import org.odftoolkit.odfdom.dom.style.props.OdfTableCellProperties;
import org.odftoolkit.odfdom.dom.style.props.OdfTableRowProperties;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class Main
{
static public void main(final String[] args)
{
try
{
String filename = "test.ods";
File file = new File(filename);
if (!file.exists())
{
System.out.println(">> Creating new spreadsheet");
// ODF spreadsheet doesn't exist, so create
OdfDocument doc =
OdfSpreadsheetDocument.newSpreadsheetDocument();
// Remove the default table added in construction
OdfFileDom contentDoc = doc.getContentDom();
Element spreadsheetElement =
(Element)contentDoc.getElementsByTagNameNS(
OdfNamespaceNames.OFFICE.getNamespaceUri(),
"spreadsheet").item(0);
OdfTable table = (OdfTable)
(spreadsheetElement.getElementsByTagNameNS(
OdfNamespaceNames.TABLE.getNamespaceUri(),
"table").item(0));
table.getParentNode().removeChild(table);
System.out.println(">> Saving new spreadsheet");
doc.save(file);
}
System.out.println(">> Loading spreadsheet");
OdfDocument conn = OdfDocument.loadDocument(file);
OdfFileDom contentDoc =
((OdfDocument)conn).getContentDom();
OdfOfficeAutomaticStyles styles =
contentDoc.getOrCreateAutomaticStyles();
OdfStyle style = styles.getStyle("DN_Headers",
OdfStyleFamily.TableRow);
if (style == null)
{
System.out.println(">> Adding DN_Headers style");
style = new OdfStyle(contentDoc);
style.setStyleNameAttribute("DN_Headers");
style.setStyleFamilyAttribute(OdfStyleFamily.TableRow.getName());
style.setProperty(OdfTableRowProperties.BackgroundColor, "#74a3db");
styles.appendChild(style);
}
style = styles.getStyle("DN_PK", OdfStyleFamily.TableCell);
if (style == null)
{
System.out.println(">> Adding DN_PK style");
style = new OdfStyle(contentDoc);
style.setStyleNameAttribute("DN_PK");
style.setStyleFamilyAttribute(OdfStyleFamily.TableCell.getName());
style.setProperty(OdfTableCellProperties.BackgroundColor, "#c2d9e0");
styles.appendChild(style);
}
style = styles.getStyle("DN_Relation",
OdfStyleFamily.TableCell);
if (style == null)
{
System.out.println(">> Adding DN_Relation style");
style = new OdfStyle(contentDoc);
style.setStyleNameAttribute("DN_Relation");
style.setStyleFamilyAttribute(OdfStyleFamily.TableCell.getName());
style.setProperty(OdfTableCellProperties.BackgroundColor, "#DDDDDD");
styles.appendChild(style);
}
String sheetName = "First";
OdfTable table = getODFTableForClass(sheetName,
contentDoc);
if (table == null)
{
System.out.println(">> Adding OdfTable with name " +
sheetName);
// Table doesn't exist yet so create and add to
spreadsheet
table = new OdfTable(contentDoc);
table.setTableNameAttribute(sheetName);
Element officeSpreadsheet =
(Element)contentDoc.getElementsByTagNameNS(
OdfNamespaceNames.OFFICE.getNamespaceUri(),
"spreadsheet").item(0);
officeSpreadsheet.appendChild(table);
}
System.out.println(">> Adding OdfTableRow");
OdfTableRow row = new OdfTableRow(contentDoc);
table.appendChild(row);
// Close the document
System.out.println(">> Saving document to " + file);
FileOutputStream os = new FileOutputStream(file);
conn.save(os);
System.out.println(">> Closing OutputStream for " + file);
os.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
public static OdfTable getODFTableForClass(String sheetName,
OdfFileDom contentDoc)
{
OdfTable table = null;
Element spreadsheetElement =
(Element)contentDoc.getElementsByTagNameNS(
OdfNamespaceNames.OFFICE.getNamespaceUri(),
"spreadsheet").item(0);
NodeList tables =
spreadsheetElement.getElementsByTagNameNS(OdfNamespaceNames.TABLE.getNa
mespaceUri(), "table");
for (int i=0;i<tables.getLength();i++)
{
Node tableNode = tables.item(i);
NamedNodeMap attrMap = tableNode.getAttributes();
for (int j=0;j<attrMap.getLength();j++)
{
Node attr = attrMap.item(j);
if (attr.getNodeName().equals("table:name") &&
attr.getNodeValue().equals(sheetName))
{
return (OdfTable)tableNode;
}
}
}
return table;
}
}
and I get a JVM dump from the OdfDocument.save()
#
# A fatal error has been detected by the Java Runtime Environment:
#
# SIGBUS (0x7) at pc=0xb7433c53, pid=13476, tid=3032931216
#
# JRE version: 6.0_14-b08
# Java VM: Java HotSpot(TM) Client VM (14.0-b16 mixed mode, sharing
linux-x86 )
# Problematic frame:
# C [libzip.so+0xbc53]
#
# 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 (0xb4972800): JavaThread
"org.datanucleus.test.Main.main()" [_thread_in_native, id=13501,
stack(0xb4c1d000,0xb4c6e000)]
siginfo:si_signo=SIGBUS: si_errno=0, si_code=2 (BUS_ADRERR),
si_addr=0xb4ad826e
Registers:
EAX=0x084ba7c0, EBX=0xb74387bc, ECX=0xb4ad8000, EDX=0x00001000
ESP=0xb4c6c098, EBP=0xb4c6c0c0, ESI=0xb4ad8251, EDI=0x0847b628
EIP=0xb7433c53, CR2=0xb4ad826e, EFLAGS=0x00210282
Top of Stack: (sp=0xb4c6c098)
0xb4c6c098: 00000030 b4b1f0a8 b4b1f0b0 b4b1f49c
0xb4c6c0a8: 081ef608 b74387bc b7433c0b b74387bc
0xb4c6c0b8: 084ba5d4 00000000 b4c6c0f0 b743400b
0xb4c6c0c8: 084ba7c0 084ba5d4 00000000 b7821fea
0xb4c6c0d8: 081ef608 00000000 91c4522e b74387bc
0xb4c6c0e8: b4c6c138 b4972910 b4c6c560 b742b1f9
0xb4c6c0f8: 084ba7c0 b4c6c138 00000000 00000015
0xb4c6c108: b4c6c138 b74387bc b4c6c120 b7434132
Instructions: (pc=0xb7433c53)
0xb7433c43: 8b 70 04 8b 45 08 8b 48 10 8b 50 1c 01 ce 29 d6
0xb7433c53: 0f b6 46 1d 0f b6 56 1c c1 e0 08 09 c2 89 55 f0
Stack: [0xb4c1d000,0xb4c6e000], sp=0xb4c6c098, free space=316k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code,
C=native code)
C [libzip.so+0xbc53]
C [libzip.so+0xc00b] ZIP_GetEntry+0x10b
C [libzip.so+0x31f9] Java_java_util_zip_ZipFile_getEntry+0xc9
J java.util.zip.ZipFile.getEntry(JLjava/lang/String;Z)J
J java.util.zip.ZipFile.getInputStream(Ljava/lang/String;)Ljava/io/InputS
tream;
J java.util.zip.ZipFile.getInputStream(Ljava/util/zip/ZipEntry;)Ljava/io/
InputStream;
j org.odftoolkit.odfdom.pkg.OdfPackage.getInputStream(Ljava/lang/String;)
Ljava/io/InputStream;+29
j org.odftoolkit.odfdom.pkg.OdfPackage.parseManifest()V+7
j org.odftoolkit.odfdom.pkg.OdfPackage.insert(Lorg/w3c/dom/Document;Ljava
/lang/String;Ljava/lang/String;)V+14
j org.odftoolkit.odfdom.doc.OdfDocument.insertDOMsToPkg()V+23
j org.odftoolkit.odfdom.doc.OdfDocument.save(Ljava/io/OutputStream;)V+95
j org.datanucleus.test.Main.main([Ljava/lang/String;)V+519
v ~StubRoutines::call_stub
V [libjvm.so+0x213560]
V [libjvm.so+0x326f58]
V [libjvm.so+0x2133bf]
V [libjvm.so+0x35433b]
V [libjvm.so+0x3572a1]
V [libjvm.so+0x28c5cf]
C [libjava.so+0x152d4] Java_sun_reflect_NativeMethodAccessorImpl_invoke0+0x34
j sun.reflect.NativeMethodAccessorImpl.invoke0(Ljava/lang/reflect/Method;
Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;+0
j sun.reflect.NativeMethodAccessorImpl.invoke(Ljava/lang/Object;[Ljava/la
ng/Object;)Ljava/lang/Object;+87
j sun.reflect.DelegatingMethodAccessorImpl.invoke(Ljava/lang/Object;[Ljav
a/lang/Object;)Ljava/lang/Object;+6
j java.lang.reflect.Method.invoke(Ljava/lang/Object;[Ljava/lang/Object;)L
java/lang/Object;+161
j org.codehaus.mojo.exec.ExecJavaMojo$1.run()V+92
j java.lang.Thread.run()V+11
v ~StubRoutines::call_stub
V [libjvm.so+0x213560]
V [libjvm.so+0x326f58]
V [libjvm.so+0x212d67]
V [libjvm.so+0x212e1a]
V [libjvm.so+0x290135]
V [libjvm.so+0x3ca43e]
V [libjvm.so+0x3283fe]
C [libpthread.so.0+0x54e2]
Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
J java.util.zip.ZipFile.getEntry(JLjava/lang/String;Z)J
J java.util.zip.ZipFile.getInputStream(Ljava/lang/String;)Ljava/io/InputS
tream;
J java.util.zip.ZipFile.getInputStream(Ljava/util/zip/ZipEntry;)Ljava/io/
InputStream;
j org.odftoolkit.odfdom.pkg.OdfPackage.getInputStream(Ljava/lang/String;)
Ljava/io/InputStream;+29
j org.odftoolkit.odfdom.pkg.OdfPackage.parseManifest()V+7
j org.odftoolkit.odfdom.pkg.OdfPackage.insert(Lorg/w3c/dom/Document;Ljava
/lang/String;Ljava/lang/String;)V+14
j org.odftoolkit.odfdom.doc.OdfDocument.insertDOMsToPkg()V+23
j org.odftoolkit.odfdom.doc.OdfDocument.save(Ljava/io/OutputStream;)V+95
j org.datanucleus.test.Main.main([Ljava/lang/String;)V+519
v ~StubRoutines::call_stub
j sun.reflect.NativeMethodAccessorImpl.invoke0(Ljava/lang/reflect/Method;
Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;+0
j sun.reflect.NativeMethodAccessorImpl.invoke(Ljava/lang/Object;[Ljava/la
ng/Object;)Ljava/lang/Object;+87
j sun.reflect.DelegatingMethodAccessorImpl.invoke(Ljava/lang/Object;[Ljav
a/lang/Object;)Ljava/lang/Object;+6
j java.lang.reflect.Method.invoke(Ljava/lang/Object;[Ljava/lang/Object;)L
java/lang/Object;+161
j org.codehaus.mojo.exec.ExecJavaMojo$1.run()V+92
j java.lang.Thread.run()V+11
v ~StubRoutines::call_stub
--------------- P R O C E S S ---------------
Java Threads: ( => current thread )
=>0xb4972800 JavaThread "org.datanucleus.test.Main.main()"
[_thread_in_native, id=13501, stack(0xb4c1d000,0xb4c6e000)]
0x08096000 JavaThread "Low Memory Detector" daemon [_thread_blocked,
id=13484, stack(0xb4d1a000,0xb4d6b000)]
0x08092c00 JavaThread "CompilerThread0" daemon [_thread_blocked,
id=13483, stack(0xb4d6b000,0xb4dec000)]
0x08091400 JavaThread "Signal Dispatcher" daemon [_thread_blocked,
id=13482, stack(0xb4dec000,0xb4e3d000)]
0x0807fc00 JavaThread "Finalizer" daemon [_thread_blocked, id=13481,
stack(0xb504c000,0xb509d000)]
0x0807e400 JavaThread "Reference Handler" daemon [_thread_blocked,
id=13480, stack(0xb509d000,0xb50ee000)]
0x08058800 JavaThread "main" [_thread_blocked, id=13478,
stack(0xb749e000,0xb74ef000)]
Other Threads:
0x0807c800 VMThread [stack: 0xb50ee000,0xb516f000] [id=13479]
0x08097c00 WatcherThread [stack: 0xb4c99000,0xb4d1a000] [id=13485]
VM state:not at safepoint (normal execution)
VM Mutex/Monitor currently owned by a thread: None
This is running on Mandriva Linux 2008.1 using JDK 1.6.0_14
| lists | 09/30/2009 | |
|
Re: ODFDOM 0.7.0 JVM Dump |
Svante Schubert | 09/30/2009 |

