Hi!

Today I got a deadlock using the latest H2 release 1.3.154.
Unfortunately I am not 100% sure if the connection was opened with
MULTI_THREADED=TRUE or without.

But I have the relevant stack traces that show the problem which might
be useful to track down the problem:

Found one Java-level deadlock:
=============================
"com.mycompany.ReportTrigger_InternalReportTrigger":
  waiting to lock monitor 0x000000004031a740 (object
0x00007f03ed8c9560, a org.h2.engine.Engine),
  which is held by "com.mycompany.DbInserter"
"com.mycompany.DbInserter":
  waiting to lock monitor 0x00000000401cb6c0 (object
0x00007f03ed88cef0, a org.h2.engine.Database),
  which is held by "DefaultQuartzScheduler_Worker-2"
"DefaultQuartzScheduler_Worker-2":
  waiting to lock monitor 0x00000000401cb618 (object
0x00007f03ee0daa18, a org.h2.engine.Session),
  which is held by
"com.mycompany.ScheduledReportTrigger_InternalReportTrigger"
"com.mycompany.ScheduledReportTrigger_InternalReportTrigger":
  waiting to lock monitor 0x00000000401cb6c0 (object
0x00007f03ed88cef0, a org.h2.engine.Database),
  which is held by "DefaultQuartzScheduler_Worker-2"

Java stack information for the threads listed above:
===================================================
"com.mycompany.ReportTrigger_InternalReportTrigger":
        at org.h2.engine.Engine.openSession(Engine.java:153)
        - waiting to lock <0x00007f03ed8c9560> (a org.h2.engine.Engine)
        at org.h2.engine.Engine.createSessionAndValidate(Engine.java:138)
        at org.h2.engine.Engine.createSession(Engine.java:121)
        at org.h2.engine.Engine.createSession(Engine.java:28)
        at
org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:
285)
        at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:114)
        at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:98)
        at org.h2.Driver.connect(Driver.java:72)
        at java.sql.DriverManager.getConnection(Unknown Source)
        at java.sql.DriverManager.getConnection(Unknown Source)
        ... my internal code - no locks held by this part ...

"com.mycompany.DbInserter":
        at org.h2.engine.Engine.openSession(Engine.java:70)
        - waiting to lock <0x00007f03ed88cef0> (a org.h2.engine.Database)
        at org.h2.engine.Engine.openSession(Engine.java:159)
        - locked <0x00007f03ed8c9560> (a org.h2.engine.Engine)
        at org.h2.engine.Engine.createSessionAndValidate(Engine.java:138)
        at org.h2.engine.Engine.createSession(Engine.java:121)
        at org.h2.engine.Engine.createSession(Engine.java:28)
        at
org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:
285)
        at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:114)
        at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:98)
        at org.h2.Driver.connect(Driver.java:72)
        at java.sql.DriverManager.getConnection(Unknown Source)
        at java.sql.DriverManager.getConnection(Unknown Source)
        ... my internal code - no locks held by this part ...

"DefaultQuartzScheduler_Worker-2":
        at org.h2.result.ResultTempTable.dropTable(ResultTempTable.java:157)
        - waiting to lock <0x00007f03ee0daa18> (a org.h2.engine.Session)
        - locked <0x00007f03ed88cef0> (a org.h2.engine.Database)
        at org.h2.result.ResultTempTable.close(ResultTempTable.java:135)
        - locked <0x00007f05260ef670> (a org.h2.result.ResultTempTable)
        at org.h2.result.LocalResult.close(LocalResult.java:366)
        at org.h2.command.dml.Insert.insertRows(Insert.java:141)
        at org.h2.command.dml.Insert.update(Insert.java:86)
        at org.h2.command.CommandContainer.update(CommandContainer.java:69)
        at org.h2.command.Command.executeUpdate(Command.java:212)
        - locked <0x00007f03ed88cef0> (a org.h2.engine.Database)
        at org.h2.jdbc.JdbcStatement.executeInternal(JdbcStatement.java:177)
        - locked <0x00007f05260ef838> (a org.h2.engine.Session)
        at org.h2.jdbc.JdbcStatement.execute(JdbcStatement.java:152)
        ... my internal code - no locks held by this part ...

"com.mycompany.ScheduledReportTrigger_InternalReportTrigger":
        at org.h2.command.Command.executeUpdate(Command.java:205)
        - waiting to lock <0x00007f03ed88cef0> (a org.h2.engine.Database)
        at
org.h2.jdbc.JdbcPreparedStatement.execute(JdbcPreparedStatement.java:
181)
        - locked <0x00007f03ee0daa18> (a org.h2.engine.Session)
        at org.h2.store.LobStorage.storeBlock(LobStorage.java:529)
        - locked <0x00007f03ed95a590> (a org.h2.store.LobStorage)
        at org.h2.store.LobStorage.addLob(LobStorage.java:385)
        - locked <0x00007f03ed95a590> (a org.h2.store.LobStorage)
        at org.h2.store.LobStorage.createBlob(LobStorage.java:620)
        at org.h2.jdbc.JdbcConnection.createBlob(JdbcConnection.java:1678)
        at
org.h2.jdbc.JdbcPreparedStatement.setBinaryStream(JdbcPreparedStatement.java:
855)
        at
org.h2.jdbc.JdbcPreparedStatement.setBinaryStream(JdbcPreparedStatement.java:
876)
        ... my internal code - no locks held by this part ...

Found 1 deadlock.

Can you see from the stacktraces if that's one of the common
multithreading table lock order problems?
I can provide more information if required.

Uli

-- 
You received this message because you are subscribed to the Google Groups "H2 
Database" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/h2-database?hl=en.

Reply via email to