summaryrefslogtreecommitdiff
path: root/repository.go
diff options
context:
space:
mode:
authorCarlos Martín Nieto <[email protected]>2013-03-06 01:43:48 +0100
committerCarlos Martín Nieto <[email protected]>2013-03-06 01:47:53 +0100
commitd43561fbf711896f5ce33f409c6000946416a82b (patch)
treed4494ed38a76fa9c69f4fc00513340ff0096f980 /repository.go
parent2885e3fe0cc403514d0ade13bae5f430b2e9252e (diff)
Free Git objects via finalizers or manually
Provide a manual way of freeing objects, but set finalizers for them in case the user does not want to worry about memory management, which would be useful for commits or trees, which sare typically small. When the objects are freed manually, the finalizer is unset to avoid double-freeing, mimicking what the go runtime does.
Diffstat (limited to 'repository.go')
-rw-r--r--repository.go16
1 files changed, 9 insertions, 7 deletions
diff --git a/repository.go b/repository.go
index 755926e..bfbfebd 100644
--- a/repository.go
+++ b/repository.go
@@ -27,7 +27,7 @@ func Open(path string) (*Repository, error) {
return nil, LastError()
}
- runtime.SetFinalizer(repo, freeRepository)
+ runtime.SetFinalizer(repo, (*Repository).Free)
return repo, nil
}
@@ -42,12 +42,13 @@ func Init(path string, isbare bool) (*Repository, error) {
return nil, LastError()
}
- runtime.SetFinalizer(repo, freeRepository)
+ runtime.SetFinalizer(repo, (*Repository).Free)
return repo, nil
}
-func freeRepository(repo *Repository) {
- C.git_repository_free(repo.ptr)
+func (v *Repository) Free() {
+ runtime.SetFinalizer(v, nil)
+ C.git_repository_free(v.ptr)
}
func (v *Repository) Config() (*Config, error) {
@@ -127,8 +128,9 @@ func (v *Repository) Commit(
}
*/
-func freeOdb(odb *Odb) {
- C.git_odb_free(odb.ptr)
+func (v *Odb) Free() {
+ runtime.SetFinalizer(v, nil)
+ C.git_odb_free(v.ptr)
}
func (v *Repository) Odb() (odb *Odb, err error) {
@@ -137,7 +139,7 @@ func (v *Repository) Odb() (odb *Odb, err error) {
return nil, LastError()
}
- runtime.SetFinalizer(odb, freeOdb)
+ runtime.SetFinalizer(odb, (*Odb).Free)
return
}