func()

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
}