diff options
Diffstat (limited to 'refdb.go')
| -rw-r--r-- | refdb.go | 9 |
1 files changed, 7 insertions, 2 deletions
@@ -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) } |
