diff options
| author | Steffen Prohaska <[email protected]> | 2018-02-09 07:52:16 +0000 |
|---|---|---|
| committer | Steffen Prohaska <[email protected]> | 2018-02-09 11:17:10 +0100 |
| commit | fcb86e6f8ec787d7ae1fd8978445da2d33ecef72 (patch) | |
| tree | f08ec27ee3b21e6c3a7e3611cc9a7ec9f1c50e28 | |
| parent | 432a164805a43a5ee0df15f7939dc771fc8d4fbd (diff) | |
tree: keep tree receiver alive as long as dependent entry is used
Signed-off-by: Steffen Prohaska <[email protected]>
| -rw-r--r-- | tree.go | 15 |
1 files changed, 9 insertions, 6 deletions
@@ -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 { |
