summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--config.go7
-rw-r--r--diff.go13
-rw-r--r--merge.go13
-rw-r--r--odb.go14
-rw-r--r--packbuilder.go3
-rw-r--r--patch.go4
-rw-r--r--refdb.go6
-rw-r--r--reference.go4
-rw-r--r--remote.go7
-rw-r--r--repository.go6
10 files changed, 77 insertions, 0 deletions
diff --git a/config.go b/config.go
index 5bcb0f8..bbf03e2 100644
--- a/config.go
+++ b/config.go
@@ -235,6 +235,10 @@ func (c *Config) SetInt32(name string, value int32) (err error) {
cname := C.CString(name)
defer C.free(unsafe.Pointer(cname))
+
+ runtime.LockOSThread()
+ defer runtime.UnlockOSThread()
+
ret := C.git_config_set_int32(c.ptr, cname, C.int32_t(value))
if ret < 0 {
return MakeGitError(ret)
@@ -350,6 +354,9 @@ type ConfigIterator struct {
func (iter *ConfigIterator) Next() (*ConfigEntry, error) {
var centry *C.git_config_entry
+ runtime.LockOSThread()
+ defer runtime.UnlockOSThread()
+
ret := C.git_config_next(&centry, iter.ptr)
if ret < 0 {
return nil, MakeGitError(ret)
diff --git a/diff.go b/diff.go
index 9ce275c..d7d8118 100644
--- a/diff.go
+++ b/diff.go
@@ -287,6 +287,9 @@ func (diff *Diff) Patch(deltaIndex int) (*Patch, error) {
}
var patchPtr *C.git_patch
+ runtime.LockOSThread()
+ defer runtime.UnlockOSThread()
+
ecode := C.git_patch_from_diff(&patchPtr, diff.ptr, C.size_t(deltaIndex))
if ecode < 0 {
return nil, MakeGitError(ecode)
@@ -348,6 +351,10 @@ type DiffOptions struct {
func DefaultDiffOptions() (DiffOptions, error) {
opts := C.git_diff_options{}
+
+ runtime.LockOSThread()
+ defer runtime.UnlockOSThread()
+
ecode := C.git_diff_init_options(&opts, C.GIT_DIFF_OPTIONS_VERSION)
if ecode < 0 {
return DiffOptions{}, MakeGitError(ecode)
@@ -487,6 +494,9 @@ func (v *Repository) DiffTreeToTree(oldTree, newTree *Tree, opts *DiffOptions) (
}
}
+ runtime.LockOSThread()
+ defer runtime.UnlockOSThread()
+
ecode := C.git_diff_tree_to_tree(&diffPtr, v.ptr, oldPtr, newPtr, copts)
if ecode < 0 {
return nil, MakeGitError(ecode)
@@ -536,6 +546,9 @@ func (v *Repository) DiffTreeToWorkdir(oldTree *Tree, opts *DiffOptions) (*Diff,
}
}
+ runtime.LockOSThread()
+ defer runtime.UnlockOSThread()
+
ecode := C.git_diff_tree_to_workdir(&diffPtr, v.ptr, oldPtr, copts)
if ecode < 0 {
return nil, MakeGitError(ecode)
diff --git a/merge.go b/merge.go
index 83a682c..285c9c5 100644
--- a/merge.go
+++ b/merge.go
@@ -39,6 +39,9 @@ func (r *Repository) AnnotatedCommitFromFetchHead(branchName string, remoteURL s
cremoteURL := C.CString(remoteURL)
defer C.free(unsafe.Pointer(cremoteURL))
+ runtime.LockOSThread()
+ defer runtime.UnlockOSThread()
+
ret := C.git_annotated_commit_from_fetchhead(&mh.ptr, r.ptr, cbranchName, cremoteURL, oid.toC())
if ret < 0 {
return nil, MakeGitError(ret)
@@ -50,6 +53,9 @@ func (r *Repository) AnnotatedCommitFromFetchHead(branchName string, remoteURL s
func (r *Repository) LookupAnnotatedCommit(oid *Oid) (*AnnotatedCommit, error) {
mh := &AnnotatedCommit{}
+ runtime.LockOSThread()
+ defer runtime.UnlockOSThread()
+
ret := C.git_annotated_commit_lookup(&mh.ptr, r.ptr, oid.toC())
if ret < 0 {
return nil, MakeGitError(ret)
@@ -61,6 +67,9 @@ func (r *Repository) LookupAnnotatedCommit(oid *Oid) (*AnnotatedCommit, error) {
func (r *Repository) AnnotatedCommitFromRef(ref *Reference) (*AnnotatedCommit, error) {
mh := &AnnotatedCommit{}
+ runtime.LockOSThread()
+ defer runtime.UnlockOSThread()
+
ret := C.git_annotated_commit_from_ref(&mh.ptr, r.ptr, ref.ptr)
if ret < 0 {
return nil, MakeGitError(ret)
@@ -98,6 +107,10 @@ func mergeOptionsFromC(opts *C.git_merge_options) MergeOptions {
func DefaultMergeOptions() (MergeOptions, error) {
opts := C.git_merge_options{}
+
+ runtime.LockOSThread()
+ defer runtime.UnlockOSThread()
+
ecode := C.git_merge_init_options(&opts, C.GIT_MERGE_OPTIONS_VERSION)
if ecode < 0 {
return MergeOptions{}, MakeGitError(ecode)
diff --git a/odb.go b/odb.go
index 7076e20..9ea151b 100644
--- a/odb.go
+++ b/odb.go
@@ -25,6 +25,9 @@ type OdbBackend struct {
func NewOdb() (odb *Odb, err error) {
odb = new(Odb)
+ runtime.LockOSThread()
+ defer runtime.UnlockOSThread()
+
ret := C.git_odb_new(&odb.ptr)
if ret < 0 {
return nil, MakeGitError(ret)
@@ -40,6 +43,10 @@ func NewOdbBackendFromC(ptr *C.git_odb_backend) (backend *OdbBackend) {
}
func (v *Odb) AddBackend(backend *OdbBackend, priority int) (err error) {
+
+ runtime.LockOSThread()
+ defer runtime.UnlockOSThread()
+
ret := C.git_odb_add_backend(v.ptr, backend.ptr, C.int(priority))
if ret < 0 {
backend.Free()
@@ -110,6 +117,9 @@ func (v *Odb) ForEach(callback OdbForEachCallback) error {
err: nil,
}
+ runtime.LockOSThread()
+ defer runtime.UnlockOSThread()
+
ret := C._go_git_odb_foreach(v.ptr, unsafe.Pointer(&data))
if ret == C.GIT_EUSER {
return data.err
@@ -140,6 +150,10 @@ func (v *Odb) Hash(data []byte, otype ObjectType) (oid *Oid, err error) {
// contents of the object.
func (v *Odb) NewReadStream(id *Oid) (*OdbReadStream, error) {
stream := new(OdbReadStream)
+
+ runtime.LockOSThread()
+ defer runtime.UnlockOSThread()
+
ret := C.git_odb_open_rstream(&stream.ptr, v.ptr, id.toC())
if ret < 0 {
return nil, MakeGitError(ret)
diff --git a/packbuilder.go b/packbuilder.go
index 666f5c4..24d2f6d 100644
--- a/packbuilder.go
+++ b/packbuilder.go
@@ -132,6 +132,9 @@ func (pb *Packbuilder) ForEach(callback PackbuilderForeachCallback) error {
err: nil,
}
+ runtime.LockOSThread()
+ defer runtime.UnlockOSThread()
+
err := C._go_git_packbuilder_foreach(pb.ptr, unsafe.Pointer(&data))
if err == C.GIT_EUSER {
return data.err
diff --git a/patch.go b/patch.go
index 0665501..0fe1c04 100644
--- a/patch.go
+++ b/patch.go
@@ -40,6 +40,10 @@ func (patch *Patch) String() (string, error) {
return "", ErrInvalid
}
var buf C.git_buf
+
+ runtime.LockOSThread()
+ defer runtime.UnlockOSThread()
+
ecode := C.git_patch_to_buf(&buf, patch.ptr)
if ecode < 0 {
return "", MakeGitError(ecode)
diff --git a/refdb.go b/refdb.go
index 46fbb63..36e2f0a 100644
--- a/refdb.go
+++ b/refdb.go
@@ -23,6 +23,9 @@ type RefdbBackend struct {
func (v *Repository) NewRefdb() (refdb *Refdb, err error) {
refdb = new(Refdb)
+ runtime.LockOSThread()
+ defer runtime.UnlockOSThread()
+
ret := C.git_refdb_new(&refdb.ptr, v.ptr)
if ret < 0 {
return nil, MakeGitError(ret)
@@ -38,6 +41,9 @@ func NewRefdbBackendFromC(ptr *C.git_refdb_backend) (backend *RefdbBackend) {
}
func (v *Refdb) SetBackend(backend *RefdbBackend) (err error) {
+ runtime.LockOSThread()
+ defer runtime.UnlockOSThread()
+
ret := C.git_refdb_set_backend(v.ptr, backend.ptr)
if ret < 0 {
backend.Free()
diff --git a/reference.go b/reference.go
index ce9d722..5cac436 100644
--- a/reference.go
+++ b/reference.go
@@ -294,6 +294,10 @@ func (v *ReferenceNameIterator) Next() (string, error) {
// returned error is git.ErrIterOver
func (v *ReferenceIterator) Next() (*Reference, error) {
var ptr *C.git_reference
+
+ runtime.LockOSThread()
+ defer runtime.UnlockOSThread()
+
ret := C.git_reference_next(&ptr, v.ptr)
if ret < 0 {
return nil, MakeGitError(ret)
diff --git a/remote.go b/remote.go
index 96cc4c1..faff9c5 100644
--- a/remote.go
+++ b/remote.go
@@ -249,6 +249,10 @@ func (r *Remote) Free() {
func (repo *Repository) ListRemotes() ([]string, error) {
var r C.git_strarray
+
+ runtime.LockOSThread()
+ defer runtime.UnlockOSThread()
+
ecode := C.git_remote_list(&r, repo.ptr)
if ecode < 0 {
return nil, MakeGitError(ecode)
@@ -573,6 +577,9 @@ func (o *Remote) Fetch(refspecs []string, sig *Signature, msg string) error {
crefspecs.strings = makeCStringsFromStrings(refspecs)
defer freeStrarray(&crefspecs)
+ runtime.LockOSThread()
+ defer runtime.UnlockOSThread()
+
ret := C.git_remote_fetch(o.ptr, &crefspecs, csig, cmsg)
if ret < 0 {
return MakeGitError(ret)
diff --git a/repository.go b/repository.go
index 09f5fef..2baeb4a 100644
--- a/repository.go
+++ b/repository.go
@@ -72,6 +72,9 @@ func InitRepository(path string, isbare bool) (*Repository, error) {
func NewRepositoryWrapOdb(odb *Odb) (repo *Repository, err error) {
repo = new(Repository)
+ runtime.LockOSThread()
+ defer runtime.UnlockOSThread()
+
ret := C.git_repository_wrap_odb(&repo.ptr, odb.ptr)
if ret < 0 {
return nil, MakeGitError(ret)
@@ -386,6 +389,9 @@ func (v *Repository) CreateTag(
ctarget := commit.gitObject.ptr
+ runtime.LockOSThread()
+ defer runtime.UnlockOSThread()
+
ret := C.git_tag_create(oid.toC(), v.ptr, cname, ctarget, taggerSig, cmessage, 0)
if ret < 0 {
return nil, MakeGitError(ret)