summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlhchavez <[email protected]>2019-02-16 17:14:39 +0000
committerlhchavez <[email protected]>2020-02-22 19:21:44 -0800
commit2bb5930733a50b441c4a591dee931af00cf293f2 (patch)
treeb8ea865ec8ff69da466c834631b58f5fb4eb2dd1
parent26edffd5f57618d2927926fde4c4ac1fcba5d84a (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.
-rw-r--r--repository.go4
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()
}