github.com/cockroachdb/pebble@v1.1.1-0.20240513155919-3622ade60459/internal/cache/entry_invariants.go (about)

     1  // Copyright 2020 The LevelDB-Go and Pebble Authors. All rights reserved. Use
     2  // of this source code is governed by a BSD-style license that can be found in
     3  // the LICENSE file.
     4  //
     5  //go:build (invariants && !race) || (tracing && !race)
     6  // +build invariants,!race tracing,!race
     7  
     8  package cache
     9  
    10  import (
    11  	"fmt"
    12  	"os"
    13  
    14  	"github.com/cockroachdb/pebble/internal/invariants"
    15  )
    16  
    17  // When the "invariants" or "tracing" build tags are enabled, we need to
    18  // allocate entries using the Go allocator so entry.val properly maintains a
    19  // reference to the Value.
    20  const entriesGoAllocated = true
    21  
    22  func entryAllocNew() *entry {
    23  	e := &entry{}
    24  	// Note: this is a no-op if invariants and tracing are disabled or race is
    25  	// enabled.
    26  	invariants.SetFinalizer(e, func(obj interface{}) {
    27  		e := obj.(*entry)
    28  		if v := e.ref.refs(); v != 0 {
    29  			fmt.Fprintf(os.Stderr, "%p: cache entry has non-zero reference count: %d\n%s",
    30  				e, v, e.ref.traces())
    31  			os.Exit(1)
    32  		}
    33  	})
    34  	return e
    35  }
    36  
    37  func entryAllocFree(e *entry) {
    38  }