Noel, I set MVCC=false but that did not help anyway.
I have debugged more and I can see the following.
Here is the code of Session#close():
@Override
public void close() {
if (!closed) {
try {
database.checkPowerOff();
rollback();
removeTemporaryLobs(false);
cleanTempTables(true);
undoLog.clear();
database.removeSession(this);
} finally {
closed = true;
}
}
}
Calling *rollback();* results in *unlockAll()* and cleans up the #locks
field.
However, I can see that *#locks* contains a new lock on PUBLIC.SYS after
*cleanTempTables(true);* is call is completed. So, lock is aquired at some
place in *#cleanTempTables* and is not released. That results in closed
*Session* with an aquired lock.
After some more debugging I found that lock happens at line "
*database.lockMeta(session);*" of method
*MVTable#removeChildrenAndResources*:
public void removeChildrenAndResources(Session session) {
if (containsLargeObject) {
// unfortunately, the data is gone on rollback
truncate(session);
database.getLobStorage().removeAllForTable(getId());
database.lockMeta(session);
}
....
This lock is not released in scope of this method and thus it is left
aqcuired ("*database.removeMeta(session, getId())*" will not release it).
Could you please look into that?
--
You received this message because you are subscribed to the Google Groups "H2
Database" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/h2-database.
For more options, visit https://groups.google.com/d/optout.