Deadlock in H2

182 views
Skip to first unread message

Sergi Vladykin

unread,
Nov 16, 2012, 7:09:52 AM11/16/12
to h2-da...@googlegroups.com
I've got this dead lock in H2, probably we have to take lock on database and pagestore always in the same order.

Found one Java-level deadlock:
=============================
"H2 Log Writer":
  waiting to lock monitor 0x0000000042adf8e8 (object 0x00000000fd277c80, a org.h2.store.PageStore),
  which is held by "main"
"main":
  waiting to lock monitor 0x000000004242ee90 (object 0x00000000fd277d48, a org.h2.engine.Database),
  which is held by "H2 Log Writer"

Java stack information for the threads listed above:
===================================================
"H2 Log Writer":
	at org.h2.store.PageStore.flushLog(PageStore.java:985)
	- waiting to lock <0x00000000fd277c80> (a org.h2.store.PageStore)
	at org.h2.engine.Database.flush(Database.java:1780)
	- locked <0x00000000fd277d48> (a org.h2.engine.Database)
	at org.h2.store.WriterThread.run(WriterThread.java:86)
	at java.lang.Thread.run(Thread.java:662)
"main":
	at org.h2.engine.Database.lockMeta(Database.java:772)
	- waiting to lock <0x00000000fd277d48> (a org.h2.engine.Database)
	at org.h2.engine.Database.verifyMetaLocked(Database.java:760)
	at org.h2.store.PageStore.addMeta(PageStore.java:1734)
	- locked <0x00000000fd277c80> (a org.h2.store.PageStore)
	at org.h2.index.PageBtreeIndex.<init>(PageBtreeIndex.java:62)
	at org.h2.table.RegularTable.addIndex(RegularTable.java:223)
	at org.h2.command.ddl.AlterTableAddConstraint.tryUpdate(AlterTableAddConstraint.java:124)
	at org.h2.command.ddl.AlterTableAddConstraint.update(AlterTableAddConstraint.java:68)
	at org.h2.command.ddl.CreateTable.update(CreateTable.java:168)
	at org.h2.command.CommandContainer.update(CommandContainer.java:75)
	at org.h2.command.Command.executeUpdate(Command.java:230)
	- locked <0x00000000fd2992d0> (a org.h2.engine.Session)
	at org.h2.jdbc.JdbcStatement.executeInternal(JdbcStatement.java:177)
	- locked <0x00000000fd2992d0> (a org.h2.engine.Session)
	at org.h2.jdbc.JdbcStatement.execute(JdbcStatement.java:152)
	at org.h2.fulltext.FullTextLucene.init(FullTextLucene.java:106)

Thotheolh

unread,
Nov 19, 2012, 4:37:27 AM11/19/12
to h2-da...@googlegroups.com
It is hard to tell from a trace. Maybe you can supply some additional information like your database, schema and what you are doing and how you connect to your database ?

Noel Grandin

unread,
Nov 20, 2012, 3:07:23 AM11/20/12
to h2-da...@googlegroups.com, Sergi Vladykin
Thanks, this is fixed in SVN.
Reply all
Reply to author
Forward
0 new messages