Menu

#1753 Deadlock between SchemaManager and SessionManager

current-release
open-fixed
None
5
2026-08-24
2026-08-19
No

When executing a DROP SCHEMA statement in same time that JDBCDriver.getConnection() is invoked in another thread:

  • The request for a new connection:
    • invokes SessionManager.newSession which synchronized on SessionManager.this,
    • then invokes SchemaManager.findSchemaHsqlName which wants to lock on SchemaManager.readLock.
  • Meanwhile, on SchemaManager.dropSchema side:
    • It locks on SchemaManager.writeLock ,
    • then invokes SessionManagement.removeSchemaReference which wants to lock on SessionManager.this.

Below is the relevant part of the stack trace:

Found one Java-level deadlock:
=============================
"ForkJoinPool-1-worker-1":
  waiting to lock monitor 0x00007fb0d4059230 (object 0x00000000e0d9a1d0, a org.hsqldb.SessionManager),
  which is held by "ForkJoinPool-1-worker-3"

"ForkJoinPool-1-worker-3":
  waiting for ownable synchronizer 0x00000000e0da9530, (a java.util.concurrent.locks.ReentrantReadWriteLock$NonfairSync),
  which is held by "ForkJoinPool-1-worker-1"

Java stack information for the threads listed above:
===================================================
"ForkJoinPool-1-worker-1":
    at org.hsqldb.SessionManager.removeSchemaReference(org.hsqldb/Unknown Source)

    - waiting to lock <0x00000000e0d9a1d0> (a org.hsqldb.SessionManager)
    at org.hsqldb.SchemaManager.dropSchema(org.hsqldb/Unknown Source)
    at org.hsqldb.StatementSchema.dropSchema(org.hsqldb/Unknown Source)
    at org.hsqldb.StatementSchema.getResult(org.hsqldb/Unknown Source)
    at org.hsqldb.StatementSchema.execute(org.hsqldb/Unknown Source)
    at org.hsqldb.Session.executeCompiledStatement(org.hsqldb/Unknown Source)
    at org.hsqldb.Session.executeDirectStatement(org.hsqldb/Unknown Source)
    at org.hsqldb.Session.execute(org.hsqldb/Unknown Source)
    - locked <0x00000000e0d9a320> (a org.hsqldb.Session)
    at org.hsqldb.jdbc.JDBCStatement.fetchResult(org.hsqldb/Unknown Source)
    at org.hsqldb.jdbc.JDBCStatement.executeUpdate(org.hsqldb/Unknown Source)
    - locked <0x00000000e0d9a2d0> (a org.hsqldb.jdbc.JDBCStatement)
    at org.apache.sis.metadata.sql.internal.shared.ScriptRunner.close(org.apache.sis.metadata/ScriptRunner.java:864)

"ForkJoinPool-1-worker-3":
    at jdk.internal.misc.Unsafe.park(java.base@23.0.2/Native Method)

    - parking to wait for  <0x00000000e0da9530> (a java.util.concurrent.locks.ReentrantReadWriteLock$NonfairSync)
    at java.util.concurrent.locks.LockSupport.park(java.base@23.0.2/LockSupport.java:221)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(java.base@23.0.2/AbstractQueuedSynchronizer.java:754)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireShared(java.base@23.0.2/AbstractQueuedSynchronizer.java:1079)
    at java.util.concurrent.locks.ReentrantReadWriteLock$ReadLock.lock(java.base@23.0.2/ReentrantReadWriteLock.java:739)
    at org.hsqldb.SchemaManager.findSchemaHsqlName(org.hsqldb/Unknown Source)
    at org.hsqldb.rights.User.getInitialOrDefaultSchema(org.hsqldb/Unknown Source)
    at org.hsqldb.Session.resetSchema(org.hsqldb/Unknown Source)
    at org.hsqldb.Session.<init>(org.hsqldb/Unknown Source)
    at org.hsqldb.SessionManager.newSession(org.hsqldb/Unknown Source)
    - locked <0x00000000e0d9a1d0> (a org.hsqldb.SessionManager)
    at org.hsqldb.Database.connect(org.hsqldb/Unknown Source)
    - locked <0x00000000e0da9768> (a org.hsqldb.Database)
    at org.hsqldb.DatabaseManager.newSession(org.hsqldb/Unknown Source)
    at org.hsqldb.jdbc.JDBCConnection.<init>(org.hsqldb/Unknown Source)
    at org.hsqldb.jdbc.JDBCDriver.getConnection(org.hsqldb/Unknown Source)
    at org.hsqldb.jdbc.JDBCDataSource.getConnection(org.hsqldb/Unknown Source)
    at org.hsqldb.jdbc.JDBCDataSource.getConnection(org.hsqldb/Unknown Source)
    at org.apache.sis.metadata.sql.internal.shared.LocalDataSource.getConnection(org.apache.sis.metadata/LocalDataSource.java:385)

Discussion

  • Fred Toussi

    Fred Toussi - 2026-08-19
    • assigned_to: Fred Toussi
     
  • Fred Toussi

    Fred Toussi - 2026-08-19

    Thanks. Will be fixed soon.

     
  • Fred Toussi

    Fred Toussi - 2026-08-24
    • status: open --> open-fixed
     
  • Fred Toussi

    Fred Toussi - 2026-08-24

    Fixed and committed to SVN.

     

Log in to post a comment.