Running JunitTest_dbaccess_complex happened to deadlock the soffice.bin
process for me once (non-reproducibly), and jstack shows that there is a
deadlock in HSQLDB Java code in the in-process JVM:
Found one Java-level deadlock:
=============================
"Thread-275584":
waiting to lock monitor 0x00002ac4e8004d78 (object 0x00000005e9008720, a
org.hsqldb.lib.HsqlTimer$TaskQueue),
which is held by "HSQLDB Timer @5749ac52"
"HSQLDB Timer @5749ac52":
waiting to lock monitor 0x00002ac4e8005508 (object 0x00000007959e9bb0, a
org.hsqldb.lib.HsqlTimer$Task),
which is held by "Thread-275584"
Java stack information for the threads listed above:
===================================================
"Thread-275584":
at org.hsqldb.lib.HsqlTimer$TaskQueue.signalTaskCancelled(HsqlTimer.java:926)
- waiting to lock <0x00000005e9008720> (a org.hsqldb.lib.HsqlTimer$TaskQueue)
at org.hsqldb.lib.HsqlTimer$Task.cancel(HsqlTimer.java:728)
at org.hsqldb.lib.HsqlTimer$Task.setPeriod(HsqlTimer.java:803)
- locked <0x00000007959e9bb0> (a org.hsqldb.lib.HsqlTimer$Task)
at org.hsqldb.lib.HsqlTimer.setPeriod(HsqlTimer.java:428)
at org.hsqldb.scriptio.ScriptWriterBase.setWriteDelay(ScriptWriterBase.java:418)
at org.hsqldb.persist.Log.setWriteDelay(Log.java:529)
at org.hsqldb.persist.Logger.setWriteDelay(Logger.java:386)
- locked <0x00000005e971ad68> (a org.hsqldb.persist.Logger)
at org.hsqldb.DatabaseCommandInterpreter.processSet(DatabaseCommandInterpreter.java:2361)
at org.hsqldb.DatabaseCommandInterpreter.executePart(DatabaseCommandInterpreter.java:308)
at org.hsqldb.DatabaseCommandInterpreter.execute(DatabaseCommandInterpreter.java:170)
at org.hsqldb.Session.sqlExecuteDirectNoPreChecks(Session.java:1037)
- locked <0x00000005e9703c98> (a org.hsqldb.Database)
at org.hsqldb.Session.execute(Session.java:899)
- locked <0x00000005e9703c98> (a org.hsqldb.Database)
at org.hsqldb.jdbc.jdbcStatement.fetchResult(jdbcStatement.java:1581)
at org.hsqldb.jdbc.jdbcStatement.execute(jdbcStatement.java:628)
"HSQLDB Timer @5749ac52":
at org.hsqldb.lib.HsqlTimer$Task.getNextScheduled(HsqlTimer.java:763)
- waiting to lock <0x00000007959e9bb0> (a org.hsqldb.lib.HsqlTimer$Task)
at org.hsqldb.lib.HsqlTimer.compare(HsqlTimer.java:108)
at org.hsqldb.lib.HsqlArrayHeap.add(HsqlArrayHeap.java:122)
- locked <0x00000005e9008720> (a org.hsqldb.lib.HsqlTimer$TaskQueue)
at org.hsqldb.lib.HsqlTimer$TaskQueue.addTask(HsqlTimer.java:841)
at org.hsqldb.lib.HsqlTimer.nextTask(HsqlTimer.java:558)
at org.hsqldb.lib.HsqlTimer$TaskRunner.run(HsqlTimer.java:610)
at java.lang.Thread.run(Thread.java:745)
At least at first sight, this smells more like a bug in HSQLDB itself
than like a problem caused by invalid use of HSQLDB from LO code.
According to Wikipedia, the current stable release of HSQLDB is 2.3.3
(from June 2015), while LO's external/hsqldb appears to be 1.8.0 (at
least, the tarball we use is named
17410483b5b5f267aa18b7e00b65e6e0-hsqldb_1_8_0.zip).
And LO's configure.ac checks that the version is indeed 1.8,
AC_MSG_ERROR([no, you need hsqldb >= 1.8.0.9 but < 1.8.1])
so looks like we're stuck with that, for whatever reason? Anybody knows?
Context
- Deadlock in HSQLDB · Stephan Bergmann
Privacy Policy |
Impressum (Legal Info) |
Copyright information: Unless otherwise specified, all text and images
on this website are licensed under the
Creative Commons Attribution-Share Alike 3.0 License.
This does not include the source code of LibreOffice, which is
licensed under the Mozilla Public License (
MPLv2).
"LibreOffice" and "The Document Foundation" are
registered trademarks of their corresponding registered owners or are
in actual use as trademarks in one or more countries. Their respective
logos and icons are also subject to international copyright laws. Use
thereof is explained in our
trademark policy.