From 37230d2697a10b82de358a11392cdace5a115cb1 Mon Sep 17 00:00:00 2001 From: lhchavez Date: Sat, 16 Feb 2019 17:14:39 +0000 Subject: [PATCH] Free() the copies of repository.LookupXxx() `repository.LookupXxx()` allocate new go `Object`s that have a reference to a `C.git_object`. Those are then duplicated with `git_object_dup()`, so the original `Object`s linger unnecessarily until the Go GC kicks in. This change explicitly calls `Free()` on the originals to avoid unnecessary accumulation of garbage. (cherry picked from commit 2bb5930733a50b441c4a591dee931af00cf293f2) --- repository.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/repository.go b/repository.go index 2a4e9c8..b645051 100644 --- a/repository.go +++ b/repository.go @@ -194,6 +194,7 @@ func (v *Repository) LookupTree(id *Oid) (*Tree, error) { if err != nil { return nil, err } + defer obj.Free() return obj.AsTree() } @@ -203,6 +204,7 @@ func (v *Repository) LookupCommit(id *Oid) (*Commit, error) { if err != nil { return nil, err } + defer obj.Free() return obj.AsCommit() } @@ -212,6 +214,7 @@ func (v *Repository) LookupBlob(id *Oid) (*Blob, error) { if err != nil { return nil, err } + defer obj.Free() return obj.AsBlob() } @@ -221,6 +224,7 @@ func (v *Repository) LookupTag(id *Oid) (*Tag, error) { if err != nil { return nil, err } + defer obj.Free() return obj.AsTag() }