summaryrefslogtreecommitdiff
path: root/redo/table_darwin.go
diff options
context:
space:
mode:
authorPietro Gagliardi <[email protected]>2014-08-11 14:16:23 -0400
committerPietro Gagliardi <[email protected]>2014-08-11 14:16:23 -0400
commitb198a4dfec53a15eac5cdca9fe9d91c145a0119c (patch)
tree349c184a965ae4c78c011982a915d6f8cffc77f7 /redo/table_darwin.go
parent5d4fd8169b3d13ff1d0ccb6592cd925bcd2d8c80 (diff)
Settled race condition TODOs across all platforms... as an unfortunate case :(
Diffstat (limited to 'redo/table_darwin.go')
-rw-r--r--redo/table_darwin.go14
1 files changed, 9 insertions, 5 deletions
diff --git a/redo/table_darwin.go b/redo/table_darwin.go
index c80dbdc..95344c1 100644
--- a/redo/table_darwin.go
+++ b/redo/table_darwin.go
@@ -36,11 +36,15 @@ func finishNewTable(b *tablebase, ty reflect.Type) Table {
func (t *table) Unlock() {
t.unlock()
- // TODO RACE CONDITION HERE
- // not sure about this one...
- t.RLock()
- defer t.RUnlock()
- C.tableUpdate(t._id)
+ // there's a possibility that user actions can happen at this point, before the view is updated
+ // alas, this is something we have to deal with, because Unlock() can be called from any thread
+ go func() {
+ Do(func() {
+ t.RLock()
+ defer t.RUnlock()
+ C.tableUpdate(t._id)
+ })
+ }()
}
//export goTableDataSource_getValue