When executing a DROP SCHEMA statement in same time that JDBCDriver.getConnection() is invoked in another thread:
SessionManager.newSession which synchronized on SessionManager.this,SchemaManager.findSchemaHsqlName which wants to lock on SchemaManager.readLock.SchemaManager.dropSchema side:SchemaManager.writeLock ,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)
Thanks. Will be fixed soon.
Fixed and committed to SVN.