summaryrefslogtreecommitdiff
path: root/config.go
diff options
context:
space:
mode:
Diffstat (limited to 'config.go')
-rw-r--r--config.go19
1 files changed, 18 insertions, 1 deletions
diff --git a/config.go b/config.go
index ec8b8d0..2aa073a 100644
--- a/config.go
+++ b/config.go
@@ -1,12 +1,12 @@
package git
/*
-#cgo pkg-config: libgit2
#include <git2.h>
#include <git2/errors.h>
*/
import "C"
import (
+ "runtime"
"unsafe"
)
@@ -19,6 +19,9 @@ func (c *Config) LookupInt32(name string) (v int32, err error) {
cname := C.CString(name)
defer C.free(unsafe.Pointer(cname))
+ runtime.LockOSThread()
+ defer runtime.UnlockOSThread()
+
ret := C.git_config_get_int32(&out, c.ptr, cname)
if ret < 0 {
return 0, LastError()
@@ -32,6 +35,9 @@ func (c *Config) LookupInt64(name string) (v int64, err error) {
cname := C.CString(name)
defer C.free(unsafe.Pointer(cname))
+ runtime.LockOSThread()
+ defer runtime.UnlockOSThread()
+
ret := C.git_config_get_int64(&out, c.ptr, cname)
if ret < 0 {
return 0, LastError()
@@ -45,6 +51,9 @@ func (c *Config) LookupString(name string) (v string, err error) {
cname := C.CString(name)
defer C.free(unsafe.Pointer(cname))
+ runtime.LockOSThread()
+ defer runtime.UnlockOSThread()
+
ret := C.git_config_get_string(&ptr, c.ptr, cname)
if ret < 0 {
return "", LastError()
@@ -60,6 +69,9 @@ func (c *Config) Set(name, value string) (err error) {
cvalue := C.CString(value)
defer C.free(unsafe.Pointer(cvalue))
+ runtime.LockOSThread()
+ defer runtime.UnlockOSThread()
+
ret := C.git_config_set_string(c.ptr, cname, cvalue)
if ret < 0 {
return LastError()
@@ -67,3 +79,8 @@ func (c *Config) Set(name, value string) (err error) {
return nil
}
+
+func (c *Config) Free() {
+ runtime.SetFinalizer(c, nil)
+ C.git_config_free(c.ptr)
+}