diff options
author | Ben Johnson <benbjohnson@yahoo.com> | 2014-03-31 08:52:13 -0600 |
---|---|---|
committer | Ben Johnson <benbjohnson@yahoo.com> | 2014-03-31 08:52:19 -0600 |
commit | 440b89418f5907099cf06764ad7f2b83cf12fbcf (patch) | |
tree | 6b0b06f7fc1ca4c4799ebb480961ed297bf9667b /db.go | |
parent | Merge pull request #98 from benbjohnson/fsck (diff) | |
download | dedo-440b89418f5907099cf06764ad7f2b83cf12fbcf.tar.gz dedo-440b89418f5907099cf06764ad7f2b83cf12fbcf.tar.xz |
Write freelist after each commit.
Well, this is embarassing. Somehow the freelist was never getting written after each commit.
This commit fixes that and fixes a small reporting issue with "bolt pages".
Diffstat (limited to 'db.go')
-rw-r--r-- | db.go | 12 |
1 files changed, 10 insertions, 2 deletions
@@ -271,6 +271,10 @@ func (db *DB) close() error { db.freelist = nil db.path = "" + // Clear ops. + db.ops.writeAt = nil + db.ops.metaWriteAt = nil + // Close the mmap. if err := db.munmap(); err != nil { return err @@ -533,8 +537,12 @@ func (db *DB) Check() error { reachable := make(map[pgid]*page) reachable[0] = tx.page(0) // meta0 reachable[1] = tx.page(1) // meta1 - reachable[tx.meta.buckets] = tx.page(tx.meta.buckets) - reachable[tx.meta.freelist] = tx.page(tx.meta.freelist) + for i := uint32(0); i <= tx.page(tx.meta.buckets).overflow; i++ { + reachable[tx.meta.buckets+pgid(i)] = tx.page(tx.meta.buckets) + } + for i := uint32(0); i <= tx.page(tx.meta.freelist).overflow; i++ { + reachable[tx.meta.freelist+pgid(i)] = tx.page(tx.meta.freelist) + } // Check each reachable page within each bucket. for _, bucket := range tx.Buckets() { |