From 55a1096141519a1f380d0702671cfe9bf90ec435 Mon Sep 17 00:00:00 2001 From: Carlos Martín Nieto Date: Sat, 8 Jul 2017 16:07:51 +0200 Subject: Third round of keep-alive aditions --- status.go | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) (limited to 'status.go') diff --git a/status.go b/status.go index e68e6e9..e37a96d 100644 --- a/status.go +++ b/status.go @@ -55,15 +55,17 @@ func statusEntryFromC(statusEntry *C.git_status_entry) StatusEntry { type StatusList struct { ptr *C.git_status_list + r *Repository } -func newStatusListFromC(ptr *C.git_status_list) *StatusList { +func newStatusListFromC(ptr *C.git_status_list, r *Repository) *StatusList { if ptr == nil { return nil } statusList := &StatusList{ ptr: ptr, + r: r, } runtime.SetFinalizer(statusList, (*StatusList).Free) @@ -84,14 +86,20 @@ func (statusList *StatusList) ByIndex(index int) (StatusEntry, error) { return StatusEntry{}, ErrInvalid } ptr := C.git_status_byindex(statusList.ptr, C.size_t(index)) - return statusEntryFromC(ptr), nil + entry := statusEntryFromC(ptr) + runtime.KeepAlive(statusList) + + return entry, nil } func (statusList *StatusList) EntryCount() (int, error) { if statusList.ptr == nil { return -1, ErrInvalid } - return int(C.git_status_list_entrycount(statusList.ptr)), nil + ret := int(C.git_status_list_entrycount(statusList.ptr)) + runtime.KeepAlive(statusList) + + return ret, nil } type StatusOpt int @@ -161,7 +169,7 @@ func (v *Repository) StatusList(opts *StatusOptions) (*StatusList, error) { return nil, MakeGitError(ret) } - return newStatusListFromC(ptr), nil + return newStatusListFromC(ptr, v), nil } func (v *Repository) StatusFile(path string) (Status, error) { @@ -173,6 +181,7 @@ func (v *Repository) StatusFile(path string) (Status, error) { defer runtime.UnlockOSThread() ret := C.git_status_file(&statusFlags, v.ptr, cPath) + runtime.KeepAlive(v) if ret < 0 { return 0, MakeGitError(ret) } -- cgit v1.2.3