summaryrefslogtreecommitdiff
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
parent2885e3fe0cc403514d0ade13bae5f430b2e9252e (diff)
parentd43561fbf711896f5ce33f409c6000946416a82b (diff)
Merge pull request #3 from carlosmn/finalizers
Free Git objects via finalizers or manually
-rw-r--r--blob.go6
-rw-r--r--commit.go3
-rw-r--r--odb.go7
-rw-r--r--repository.go16
-rw-r--r--tree.go7
5 files changed, 26 insertions, 13 deletions
diff --git a/blob.go b/blob.go
index 91064b1..f7db15e 100644
--- a/blob.go
+++ b/blob.go
@@ -7,6 +7,7 @@ package git
*/
import "C"
import (
+ "runtime"
"unsafe"
)
@@ -14,8 +15,9 @@ type Blob struct {
ptr *C.git_object
}
-func freeBlob(blob *Blob) {
- C.git_object_free(blob.ptr)
+func (v *Blob) Free() {
+ runtime.SetFinalizer(v, nil)
+ C.git_object_free(v.ptr)
}
func (v *Blob) Contents() []byte {
diff --git a/commit.go b/commit.go
index 855ed87..779ebd7 100644
--- a/commit.go
+++ b/commit.go
@@ -9,6 +9,7 @@ extern int _go_git_treewalk(git_tree *tree, git_treewalk_mode mode, void *ptr);
import "C"
import (
+ "runtime"
"time"
)
@@ -32,6 +33,8 @@ func (c *Commit) Tree() (*Tree, error) {
if err < 0 {
return nil, LastError()
}
+
+ runtime.SetFinalizer(tree, (*Tree).Free)
return tree, nil
}
diff --git a/odb.go b/odb.go
index 5688080..6370999 100644
--- a/odb.go
+++ b/odb.go
@@ -49,7 +49,7 @@ func (v *Odb) Read(oid *Oid) (obj *OdbObject, err error) {
return nil, LastError()
}
- runtime.SetFinalizer(obj, freeOdbObject)
+ runtime.SetFinalizer(obj, (*OdbObject).Free)
return
}
@@ -57,8 +57,9 @@ type OdbObject struct {
ptr *C.git_odb_object
}
-func freeOdbObject(obj *OdbObject) {
- C.git_odb_object_free(obj.ptr)
+func (v *OdbObject) Free() {
+ runtime.SetFinalizer(v, nil)
+ C.git_odb_object_free(v.ptr)
}
func (v *OdbObject) Type() int {
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
}
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)
}