diff options
| author | Carlos Martín Nieto <[email protected]> | 2013-09-18 09:23:47 +0200 |
|---|---|---|
| committer | Carlos Martín Nieto <[email protected]> | 2013-12-18 16:18:32 +0100 |
| commit | a40bdfd4202db244bfc5da348a0f0c528ef122cd (patch) | |
| tree | 115fcae49287c82eb55bb275cbbd4556fbed72b7 /config.go | |
| parent | 625ffd022e2c39f3820543cc1239deeb21837266 (diff) | |
Lock the OS thread when acessing errors
The library stores error information in thread-local storage, which
means we need to make sure that the Go runtime doesn't switch OS
threads between the time we call a function and th time we attempt to
retrieve the error information.
Diffstat (limited to 'config.go')
| -rw-r--r-- | config.go | 12 |
1 files changed, 12 insertions, 0 deletions
@@ -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() |
