From 59a5b5ab5daa588c3d17e3e01a0f4662749c4da6 Mon Sep 17 00:00:00 2001 From: Anthony Romano Date: Mon, 7 Aug 2017 19:42:27 -0700 Subject: [PATCH] fix NoSyncFreelist reachability checking * rescan freelist if valid but given NoSyncFreelist to include the freelist as free pageas. * only treat free list as reachable if set to valid pgid Fixes #9 --- db.go | 2 +- tx.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/db.go b/db.go index c9d800fc..cefc3233 100644 --- a/db.go +++ b/db.go @@ -242,7 +242,7 @@ func Open(path string, mode os.FileMode, options *Options) (*DB, error) { } db.freelist = newFreelist() - noFreeList := db.meta().freelist == pgidNoFreelist + noFreeList := db.meta().freelist == pgidNoFreelist || db.NoFreelistSync if noFreeList { // Reconstruct free list by scanning the DB. db.freelist.readIDs(db.freepages()) diff --git a/tx.go b/tx.go index fa1fa509..6615dfcb 100644 --- a/tx.go +++ b/tx.go @@ -408,7 +408,7 @@ func (tx *Tx) check(ch chan error) { reachable := make(map[pgid]*page) reachable[0] = tx.page(0) // meta0 reachable[1] = tx.page(1) // meta1 - if !tx.DB().NoFreelistSync { + if tx.meta.freelist != pgidNoFreelist { for i := uint32(0); i <= tx.page(tx.meta.freelist).overflow; i++ { reachable[tx.meta.freelist+pgid(i)] = tx.page(tx.meta.freelist) }