diff options
| author | Carlos Martín Nieto <[email protected]> | 2017-07-08 16:07:51 +0200 |
|---|---|---|
| committer | Carlos Martín Nieto <[email protected]> | 2017-07-08 16:07:51 +0200 |
| commit | 55a1096141519a1f380d0702671cfe9bf90ec435 (patch) | |
| tree | 4a9c1357f3682d4134318e73ef85aa172cbfbd48 /status.go | |
| parent | 7d29d6864474525c9853d86996d769a5459dc15d (diff) | |
Third round of keep-alive aditions
Diffstat (limited to 'status.go')
| -rw-r--r-- | status.go | 17 |
1 files changed, 13 insertions, 4 deletions
@@ -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) } |
