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?
_______________________________________________
LibreOffice mailing list
LibreOffice@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice