diff options
| author | 2026-06-14 02:26:56 +0000 | |
|---|---|---|
| committer | 2026-06-14 02:26:56 +0000 | |
| commit | a6b62ce10a102345aba2de3fbc6ce4cd5d6b91d1 (patch) | |
| tree | 267a66d1fb105156b74a0c281400b095026a3a53 /object | |
| parent | object/store/packed: Use zlib.NewReaderBytes where appropriate to reduce allocs (diff) | |
object/store/packed: Add a delta header pool
Diffstat (limited to 'object')
| -rw-r--r-- | object/store/packed/delta.go | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/object/store/packed/delta.go b/object/store/packed/delta.go index c8fe8f75..5b538221 100644 --- a/object/store/packed/delta.go +++ b/object/store/packed/delta.go @@ -10,8 +10,14 @@ import ( "lindenii.org/go/furgit/internal/format/packfile" "lindenii.org/go/furgit/internal/format/packfile/delta" "lindenii.org/go/lgo/intconv" + "lindenii.org/go/lgo/sync" ) +//nolint:gochecknoglobals +var deltaHeaderPool = sync.NewPool(func() *[delta.MaxHeaderSizesLen]byte { + return new([delta.MaxHeaderSizesLen]byte) +}) + // deltaNode is a delta entry on a resolution chain. type deltaNode struct { // payload is the entry's compressed delta payload view. @@ -214,9 +220,12 @@ func deltaResultSize(payload []byte, deltaSize uint64) (int, error) { defer func() { _ = zr.Close() }() + buf := deltaHeaderPool.Get() + defer deltaHeaderPool.Put(buf) + prefixLen := min(uint64(delta.MaxHeaderSizesLen), deltaSize) - prefix := make([]byte, prefixLen) + prefix := buf[:prefixLen] _, err = io.ReadFull(zr, prefix) if err != nil { |
