summaryrefslogtreecommitdiff
path: root/status.go
diff options
context:
space:
mode:
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)
}