summaryrefslogtreecommitdiff
path: root/status.go
diff options
context:
space:
mode:
authorCarlos Martín Nieto <[email protected]>2017-07-08 16:51:22 +0200
committerGitHub <[email protected]>2017-07-08 16:51:22 +0200
commit08db2e2c167404c5ed9be0fc1c995e41bad479bb (patch)
tree4a9c1357f3682d4134318e73ef85aa172cbfbd48 /status.go
parent29c0b730076fe402c22ea3e3a11a7ed541663637 (diff)
parent55a1096141519a1f380d0702671cfe9bf90ec435 (diff)
Merge pull request #393 from libgit2/cmn/keepalive-all-the-things
KeepAlive all the things
Diffstat (limited to 'status.go')
-rw-r--r--status.go17
1 files changed, 13 insertions, 4 deletions
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)
}