Skip to content

Commit fcb86e6

Browse files
committed
tree: keep tree receiver alive as long as dependent entry is used
Signed-off-by: Steffen Prohaska <[email protected]>
1 parent 432a164 commit fcb86e6

File tree

1 file changed

+9
-6
lines changed

1 file changed

+9
-6
lines changed

tree.go

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -52,12 +52,13 @@ func (t Tree) EntryByName(filename string) *TreeEntry {
5252
defer C.free(unsafe.Pointer(cname))
5353

5454
entry := C.git_tree_entry_byname(t.cast_ptr, cname)
55-
runtime.KeepAlive(t)
5655
if entry == nil {
5756
return nil
5857
}
5958

60-
return newTreeEntry(entry)
59+
goEntry := newTreeEntry(entry)
60+
runtime.KeepAlive(t)
61+
return goEntry
6162
}
6263

6364
// EntryById performs a lookup for a tree entry with the given SHA value.
@@ -71,13 +72,14 @@ func (t Tree) EntryById(id *Oid) *TreeEntry {
7172
defer runtime.UnlockOSThread()
7273

7374
entry := C.git_tree_entry_byid(t.cast_ptr, id.toC())
74-
runtime.KeepAlive(t)
7575
runtime.KeepAlive(id)
7676
if entry == nil {
7777
return nil
7878
}
7979

80-
return newTreeEntry(entry)
80+
goEntry := newTreeEntry(entry)
81+
runtime.KeepAlive(t)
82+
return goEntry
8183
}
8284

8385
// EntryByPath looks up an entry by its full path, recursing into
@@ -102,12 +104,13 @@ func (t Tree) EntryByPath(path string) (*TreeEntry, error) {
102104

103105
func (t Tree) EntryByIndex(index uint64) *TreeEntry {
104106
entry := C.git_tree_entry_byindex(t.cast_ptr, C.size_t(index))
105-
runtime.KeepAlive(t)
106107
if entry == nil {
107108
return nil
108109
}
109110

110-
return newTreeEntry(entry)
111+
goEntry := newTreeEntry(entry)
112+
runtime.KeepAlive(t)
113+
return goEntry
111114
}
112115

113116
func (t Tree) EntryCount() uint64 {

0 commit comments

Comments
 (0)