diff options
author | Josh Bleecher Snyder <josharian@gmail.com> | 2016-12-22 17:22:44 -0800 |
---|---|---|
committer | Josh Bleecher Snyder <josharian@gmail.com> | 2016-12-23 09:18:57 -0800 |
commit | 7adfa44e02041a6d9b571025a8237a13fa6fbde8 (patch) | |
tree | f7b614d155c749de5a7ee6e5e6e44adf1a33b19c | |
parent | Precalculate size of pending pgids in freelist.copyall (diff) | |
download | dedo-7adfa44e02041a6d9b571025a8237a13fa6fbde8.tar.gz dedo-7adfa44e02041a6d9b571025a8237a13fa6fbde8.tar.xz |
Fix freelist.size calculation for large freelists
freelist.size did not account for the extra
fake freelist item used to hold the number of
elements when the freelist is large.
-rw-r--r-- | freelist.go | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/freelist.go b/freelist.go index de59aaa..aba48f5 100644 --- a/freelist.go +++ b/freelist.go @@ -24,7 +24,12 @@ func newFreelist() *freelist { // size returns the size of the page after serialization. func (f *freelist) size() int { - return pageHeaderSize + (int(unsafe.Sizeof(pgid(0))) * f.count()) + n := f.count() + if n >= 0xFFFF { + // The first element will be used to store the count. See freelist.write. + n++ + } + return pageHeaderSize + (int(unsafe.Sizeof(pgid(0))) * n) } // count returns count of pages on the freelist |