aboutsummaryrefslogtreecommitdiff
path: root/freelist.go
diff options
context:
space:
mode:
authorBen Johnson <benbjohnson@yahoo.com>2016-08-18 11:01:52 -0600
committerGitHub <noreply@github.com>2016-08-18 11:01:52 -0600
commit583e8937c61f1af6513608ccc75c97b6abdf4ff9 (patch)
tree3f90eabcfd6a26c8bbc021665ab996ed4325c492 /freelist.go
parentMerge pull request #579 from asdine/master (diff)
parentfix Go 1.7 pointer reference bug (diff)
downloaddedo-583e8937c61f1af6513608ccc75c97b6abdf4ff9.tar.gz
dedo-583e8937c61f1af6513608ccc75c97b6abdf4ff9.tar.xz
Merge pull request #584 from benbjohnson/go17
Fix Go 1.7 pointer reference bug
Diffstat (limited to 'freelist.go')
-rw-r--r--freelist.go18
1 files changed, 12 insertions, 6 deletions
diff --git a/freelist.go b/freelist.go
index 0161948..1b7ba91 100644
--- a/freelist.go
+++ b/freelist.go
@@ -166,12 +166,16 @@ func (f *freelist) read(p *page) {
}
// Copy the list of page ids from the freelist.
- ids := ((*[maxAllocSize]pgid)(unsafe.Pointer(&p.ptr)))[idx:count]
- f.ids = make([]pgid, len(ids))
- copy(f.ids, ids)
+ if count == 0 {
+ f.ids = nil
+ } else {
+ ids := ((*[maxAllocSize]pgid)(unsafe.Pointer(&p.ptr)))[idx:count]
+ f.ids = make([]pgid, len(ids))
+ copy(f.ids, ids)
- // Make sure they're sorted.
- sort.Sort(pgids(f.ids))
+ // Make sure they're sorted.
+ sort.Sort(pgids(f.ids))
+ }
// Rebuild the page cache.
f.reindex()
@@ -189,7 +193,9 @@ func (f *freelist) write(p *page) error {
// The page.count can only hold up to 64k elements so if we overflow that
// number then we handle it by putting the size in the first element.
- if len(ids) < 0xFFFF {
+ if len(ids) == 0 {
+ p.count = uint16(len(ids))
+ } else if len(ids) < 0xFFFF {
p.count = uint16(len(ids))
copy(((*[maxAllocSize]pgid)(unsafe.Pointer(&p.ptr)))[:], ids)
} else {