in pq/buffer.go [246:284]
func (b *buffer) Reset(last *page) {
if b.head == nil {
return
}
// Find last page not to be removed. A non-dirty page must not be removed
// if the next page is dirty, so to update the on-disk link.
// If no page is dirty, keep last page for linking.
pages := 0
end := b.head
for current := b.head; current.Next != nil && current != b.eventHdrPage; current = current.Next {
if current.Next.Dirty() || current == last {
end = current
break
}
end = current.Next
pages++
}
tracef("reset pages (%v)\n", pages)
invariant.Check(end != nil, "must not empty page list on reset")
// release pages
spaceFreed := 0
for page := b.head; page != end; {
freed := int(page.Meta.EndOff) - szEventPageHeader
tracef("writer: release page %v (%v)\n", page.Meta.ID, freed)
next := page.Next
spaceFreed += freed
b.releasePage(page)
page = next
}
b.head = end
// update memory usage counters
b.avail += spaceFreed
}