Hi

Wooee! Excellent bug report, that was 3 separate bugs I ended up fixing, all 
committed to current SVN trunk.

Thanks Sergi!

Regards, Noel.

On 2015-03-30 03:42 PM, Sergi Vladykin wrote:
Guys,

In the latest 1.4.186 release I see NPE when running simple multithreaded 
benchmark:

@Benchmark
@Threads(4)
public voidtestMethod()throwsSQLException {
     Connection c =connect.get();

     try(Statement s = c.createStatement()) {
         s.executeUpdate("create local temporary table t(id  int)");
         s.executeUpdate("drop table t");
     }
}


Caused by: java.lang.NullPointerException
     at org.h2.mvstore.db.MVTable.checkDeadlock(MVTable.java:317)
     at org.h2.mvstore.db.MVTable.doLock1(MVTable.java:169)
     at org.h2.mvstore.db.MVTable.lock(MVTable.java:132)
     at org.h2.engine.Database.lockMeta(Database.java:890)
     at org.h2.command.ddl.DropTable.executeDrop(DropTable.java:102)
     at org.h2.command.ddl.DropTable.update(DropTable.java:114)
     at org.h2.command.CommandContainer.update(CommandContainer.java:78)
     at org.h2.command.Command.executeUpdate(Command.java:254)
     ... 15 more

This happens because field MVTable#lockExclusiveSession is nullified outside of 
lock in method #unlock but in method
#checkDeadlock it is getting reread after the null check. To fix either assign 
it to a local var in #checkDeadlock or
don't update outside of the lock in method #unlock.

By the way method #contains on ConcurrentHashMap (see field 
MVTable#lockSharedSessions) really means #constainsValue and
does iteration over the whole map, I would recommend either to use #conatinsKey 
or use wrapper Collections.newSetFromMap
to avoid confusions like that.

Sergi



--
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] 
<mailto:[email protected]>.
To post to this group, send email to [email protected] 
<mailto:[email protected]>.
Visit this group at http://groups.google.com/group/h2-database.
For more options, visit https://groups.google.com/d/optout.

--
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 http://groups.google.com/group/h2-database.
For more options, visit https://groups.google.com/d/optout.

Reply via email to