/** @see _SnapshotPageArray#beginSnapshot */ Snapshot beginSnapshot(_LocalDatabase db) throws IOException { mHeaderLatch.acquireShared(); try { long pageCount, redoPos; long header = p_alloc(MINIMUM_PAGE_SIZE); try { mPageArray.readPage(mCommitNumber & 1, header, 0, MINIMUM_PAGE_SIZE); pageCount = _PageManager.readTotalPageCount(header, I_MANAGER_HEADER); redoPos = _LocalDatabase.readRedoPosition(header, I_EXTRA_DATA); } finally { p_delete(header); } return mPageArray.beginSnapshot(db, pageCount, redoPos); } finally { mHeaderLatch.releaseShared(); } }