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 --- refdb.go | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'refdb.go') diff --git a/refdb.go b/refdb.go index 4e3ebf9..578f43c 100644 --- a/refdb.go +++ b/refdb.go @@ -14,6 +14,7 @@ import ( type Refdb struct { ptr *C.git_refdb + r *Repository } type RefdbBackend struct { @@ -21,16 +22,17 @@ type RefdbBackend struct { } func (v *Repository) NewRefdb() (refdb *Refdb, err error) { - refdb = new(Refdb) + var ptr *C.git_refdb runtime.LockOSThread() defer runtime.UnlockOSThread() - ret := C.git_refdb_new(&refdb.ptr, v.ptr) + ret := C.git_refdb_new(&ptr, v.ptr) if ret < 0 { return nil, MakeGitError(ret) } + refdb = &Refdb{ptr: ptr, r: v} runtime.SetFinalizer(refdb, (*Refdb).Free) return refdb, nil } @@ -45,6 +47,8 @@ func (v *Refdb) SetBackend(backend *RefdbBackend) (err error) { defer runtime.UnlockOSThread() ret := C.git_refdb_set_backend(v.ptr, backend.ptr) + runtime.KeepAlive(v) + runtime.KeepAlive(backend) if ret < 0 { backend.Free() return MakeGitError(ret) @@ -53,5 +57,6 @@ func (v *Refdb) SetBackend(backend *RefdbBackend) (err error) { } func (v *RefdbBackend) Free() { + runtime.SetFinalizer(v, nil) C._go_git_refdb_backend_free(v.ptr) } -- cgit v1.2.3