summaryrefslogtreecommitdiff
path: root/tree.go
diff options
context:
space:
mode:
authorVicent Martí <[email protected]>2013-03-05 16:59:40 -0800
committerVicent Martí <[email protected]>2013-03-05 16:59:40 -0800
commit9b6d570748ae51bf38e3192f9a5de45bc68b23c6 (patch)
treed4494ed38a76fa9c69f4fc00513340ff0096f980 /tree.go
parent2885e3fe0cc403514d0ade13bae5f430b2e9252e (diff)
parentd43561fbf711896f5ce33f409c6000946416a82b (diff)
Merge pull request #3 from carlosmn/finalizers
Free Git objects via finalizers or manually
Diffstat (limited to 'tree.go')
-rw-r--r--tree.go7
1 files changed, 6 insertions, 1 deletions
diff --git a/tree.go b/tree.go
index 324fc1f..6f1f2d0 100644
--- a/tree.go
+++ b/tree.go
@@ -9,6 +9,7 @@ extern int _go_git_treewalk(git_tree *tree, git_treewalk_mode mode, void *ptr);
import "C"
import (
+ "runtime"
"unsafe"
)
@@ -31,6 +32,7 @@ func newTreeEntry(entry *C.git_tree_entry) *TreeEntry {
}
func (t *Tree) Free() {
+ runtime.SetFinalizer(t, nil)
C.git_tree_free(t.ptr)
}
@@ -40,6 +42,8 @@ func TreeLookup(repo *Repository, oid *Oid) (*Tree, error) {
if err < 0 {
return nil, LastError()
}
+
+ runtime.SetFinalizer(tree, (*Tree).Free)
return tree, nil
}
@@ -99,7 +103,8 @@ type TreeBuilder struct {
repo *Repository
}
-func freeTreeBuilder(v *TreeBuilder) {
+func (v *TreeBuilder) Free() {
+ runtime.SetFinalizer(v, nil)
C.git_treebuilder_free(v.ptr)
}