summaryrefslogtreecommitdiff
path: root/commit.go
diff options
context:
space:
mode:
authorCarlos Martín Nieto <[email protected]>2013-09-18 09:23:47 +0200
committerCarlos Martín Nieto <[email protected]>2013-12-18 16:18:32 +0100
commita40bdfd4202db244bfc5da348a0f0c528ef122cd (patch)
tree115fcae49287c82eb55bb275cbbd4556fbed72b7 /commit.go
parent625ffd022e2c39f3820543cc1239deeb21837266 (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 'commit.go')
-rw-r--r--commit.go4
1 files changed, 4 insertions, 0 deletions
diff --git a/commit.go b/commit.go
index c633e2d..498669e 100644
--- a/commit.go
+++ b/commit.go
@@ -9,6 +9,7 @@ extern int _go_git_treewalk(git_tree *tree, git_treewalk_mode mode, void *ptr);
import "C"
import (
+ "runtime"
"time"
"unsafe"
)
@@ -25,6 +26,9 @@ func (c Commit) Message() string {
func (c Commit) Tree() (*Tree, error) {
var ptr *C.git_object
+ runtime.LockOSThread()
+ defer runtime.UnlockOSThread()
+
err := C.git_commit_tree(&ptr, c.ptr)
if err < 0 {
return nil, LastError()