diff options
| author | Carlos Martín Nieto <[email protected]> | 2015-05-30 22:23:23 +0200 |
|---|---|---|
| committer | Carlos Martín Nieto <[email protected]> | 2015-05-30 22:23:23 +0200 |
| commit | 35ff0de8559ed987ff82b025cc2bb5983f29e559 (patch) | |
| tree | 62b2ffe5ef7c32f89a49bb722c1cce85b2a9656b /odb.go | |
| parent | 193deb7ae3cbc5d5a1f7f186aae6edb20bff950a (diff) | |
| parent | e8531dd5c31fc87044e9061b18f37df9b05bd0ac (diff) | |
Merge pull request #196 from pks-t/pointer-indirection
[WIP/RFC] Pointer indirection
Diffstat (limited to 'odb.go')
| -rw-r--r-- | odb.go | 13 |
1 files changed, 10 insertions, 3 deletions
@@ -98,8 +98,12 @@ type foreachData struct { } //export odbForEachCb -func odbForEachCb(id *C.git_oid, payload unsafe.Pointer) int { - data := (*foreachData)(payload) +func odbForEachCb(id *C.git_oid, handle unsafe.Pointer) int { + data, ok := pointerHandles.Get(handle).(*foreachData) + + if !ok { + panic("could not retrieve handle") + } err := data.callback(newOidFromC(id)) if err != nil { @@ -119,7 +123,10 @@ func (v *Odb) ForEach(callback OdbForEachCallback) error { runtime.LockOSThread() defer runtime.UnlockOSThread() - ret := C._go_git_odb_foreach(v.ptr, unsafe.Pointer(&data)) + handle := pointerHandles.Track(&data) + defer pointerHandles.Untrack(handle) + + ret := C._go_git_odb_foreach(v.ptr, handle) if ret == C.GIT_EUSER { return data.err } else if ret < 0 { |
