diff options
| author | lhchavez <[email protected]> | 2019-02-16 17:14:39 +0000 |
|---|---|---|
| committer | lhchavez <[email protected]> | 2020-02-22 19:21:44 -0800 |
| commit | 2bb5930733a50b441c4a591dee931af00cf293f2 (patch) | |
| tree | b8ea865ec8ff69da466c834631b58f5fb4eb2dd1 /repository.go | |
| parent | 26edffd5f57618d2927926fde4c4ac1fcba5d84a (diff) | |
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.
Diffstat (limited to 'repository.go')
| -rw-r--r-- | repository.go | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/repository.go b/repository.go index 3e0d20f..07b2605 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() } |
