summaryrefslogtreecommitdiff
path: root/tree.go
diff options
context:
space:
mode:
authorCarlos Martín Nieto <[email protected]>2018-03-11 14:26:00 +0100
committerGitHub <[email protected]>2018-03-11 14:26:00 +0100
commitec48b0a307bfd198f2d3e9232a495d49c0276ea3 (patch)
tree568b93d7b7168604ab8890952f8cf6e728d684a3 /tree.go
parent127b9988074b45ed0f36def91f33d80b33aeee6d (diff)
parentfcb86e6f8ec787d7ae1fd8978445da2d33ecef72 (diff)
Merge pull request #430 from sprohaska/pr/keep-alive
tree: keep tree receiver alive as long as dependent entry is used
Diffstat (limited to 'tree.go')
-rw-r--r--tree.go15
1 files changed, 9 insertions, 6 deletions
diff --git a/tree.go b/tree.go
index ee14ec5..02507d2 100644
--- a/tree.go
+++ b/tree.go
@@ -52,12 +52,13 @@ func (t Tree) EntryByName(filename string) *TreeEntry {
defer C.free(unsafe.Pointer(cname))
entry := C.git_tree_entry_byname(t.cast_ptr, cname)
- runtime.KeepAlive(t)
if entry == nil {
return nil
}
- return newTreeEntry(entry)
+ goEntry := newTreeEntry(entry)
+ runtime.KeepAlive(t)
+ return goEntry
}
// EntryById performs a lookup for a tree entry with the given SHA value.
@@ -71,13 +72,14 @@ func (t Tree) EntryById(id *Oid) *TreeEntry {
defer runtime.UnlockOSThread()
entry := C.git_tree_entry_byid(t.cast_ptr, id.toC())
- runtime.KeepAlive(t)
runtime.KeepAlive(id)
if entry == nil {
return nil
}
- return newTreeEntry(entry)
+ goEntry := newTreeEntry(entry)
+ runtime.KeepAlive(t)
+ return goEntry
}
// EntryByPath looks up an entry by its full path, recursing into
@@ -102,12 +104,13 @@ func (t Tree) EntryByPath(path string) (*TreeEntry, error) {
func (t Tree) EntryByIndex(index uint64) *TreeEntry {
entry := C.git_tree_entry_byindex(t.cast_ptr, C.size_t(index))
- runtime.KeepAlive(t)
if entry == nil {
return nil
}
- return newTreeEntry(entry)
+ goEntry := newTreeEntry(entry)
+ runtime.KeepAlive(t)
+ return goEntry
}
func (t Tree) EntryCount() uint64 {