diff options
| author | Carlos MartÃn Nieto <[email protected]> | 2018-03-11 14:26:00 +0100 |
|---|---|---|
| committer | GitHub <[email protected]> | 2018-03-11 14:26:00 +0100 |
| commit | ec48b0a307bfd198f2d3e9232a495d49c0276ea3 (patch) | |
| tree | 568b93d7b7168604ab8890952f8cf6e728d684a3 | |
| parent | 127b9988074b45ed0f36def91f33d80b33aeee6d (diff) | |
| parent | fcb86e6f8ec787d7ae1fd8978445da2d33ecef72 (diff) | |
Merge pull request #430 from sprohaska/pr/keep-alive
tree: keep tree receiver alive as long as dependent entry is used
| -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 { |
