Hi Noel, Thanks for looking into it more. At least I wasn't completely crazy :)
On Friday, June 14, 2013 7:13:06 AM UTC-5, Noel Grandin wrote: > > > On 2013-06-13 19:58, Andrew Helgeson wrote: > > > > Thanks for your help however I'm still running into this problem with > > the latest code. I built a jar from the svn repo at r4849 and it's > > still occurring with the same stack trace. > > > > Hi > > OK, I can reproduce this now. It only seems to happen about 1 in 5 times > for me, which is why I missed it the first couple of times. > > Thomas, this is what seems to be happening: > A Page is being free, but then the code freeing the page is then later > acting as if it still had access to that Page. > > The page is freed via the call-path: > at org.h2.store.PageStore.freePage(PageStore.java:1106) > at org.h2.store.PageStore.free(PageStore.java:1227) > at org.h2.store.PageStore.free(PageStore.java:1207) > at org.h2.index.PageBtreeNode.freeRecursive(PageBtreeNode.java:454) > at org.h2.index.PageBtreeIndex.removeAllRows(PageBtreeIndex.java:272) > at org.h2.index.PageBtreeIndex.truncate(PageBtreeIndex.java:262) > at org.h2.table.RegularTable.truncate(RegularTable.java:402) > at org.h2.result.ResultTempTable.dropTable(ResultTempTable.java:155) > at org.h2.result.ResultTempTable.close(ResultTempTable.java:145) > at org.h2.result.LocalResult.close(LocalResult.java:394) > at org.h2.jdbc.JdbcResultSet.closeInternal(JdbcResultSet.java:201) > at > org.h2.jdbc.JdbcStatement.closeOldResultSet(JdbcStatement.java:994) > at org.h2.jdbc.JdbcStatement.close(JdbcStatement.java:243) > at > org.h2.jdbc.JdbcPreparedStatement.close(JdbcPreparedStatement.java:1112) > at > org.h2.test.H2CorruptionTest.doDistinctSelect(H2CorruptionTest.java:140) > at org.h2.test.H2CorruptionTest.access$4(H2CorruptionTest.java:123) > at org.h2.test.H2CorruptionTest$1.run(H2CorruptionTest.java:87) > > And then the page is re-used via the call-path: > at org.h2.util.CacheLRU.update(CacheLRU.java:134) > at org.h2.store.PageStore.update(PageStore.java:1062) > at org.h2.index.PageDataIndex.removeAllRows(PageDataIndex.java:395) > at org.h2.index.PageDataIndex.truncate(PageDataIndex.java:377) > at org.h2.table.RegularTable.truncate(RegularTable.java:402) > at org.h2.result.ResultTempTable.dropTable(ResultTempTable.java:155) > at org.h2.result.ResultTempTable.close(ResultTempTable.java:145) > at org.h2.result.LocalResult.close(LocalResult.java:394) > at org.h2.jdbc.JdbcResultSet.closeInternal(JdbcResultSet.java:201) > at > org.h2.jdbc.JdbcStatement.closeOldResultSet(JdbcStatement.java:994) > at org.h2.jdbc.JdbcStatement.close(JdbcStatement.java:243) > at > org.h2.jdbc.JdbcPreparedStatement.close(JdbcPreparedStatement.java:1112) > at > org.h2.test.H2CorruptionTest.doDistinctSelect(H2CorruptionTest.java:140) > at org.h2.test.H2CorruptionTest.access$4(H2CorruptionTest.java:123) > at org.h2.test.H2CorruptionTest$1.run(H2CorruptionTest.java:87) > > Hopefully, this will provide Thomas will enough information to find the > fix. > > I think that the problem is that PageDataIndex#removeAllRows() is > calling freeRecursive() on it's root Page, when it should probably only > be freeing the children of the root page, not the root page itself. > But I don't know the code well enough to be sure. > > -- 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/groups/opt_out.
