summaryrefslogtreecommitdiff
path: root/redo/table_unix.go
diff options
context:
space:
mode:
authorPietro Gagliardi <[email protected]>2014-08-11 19:38:21 -0400
committerPietro Gagliardi <[email protected]>2014-08-11 19:38:21 -0400
commit166eaeb7db48232cfac460d8d6d8d8476e7a8664 (patch)
treeaa9c3afc6574d0fa7fccd9216ad50e70224dcf6e /redo/table_unix.go
parent67adbd43a1bbf35fdc3963b34ae5631758006fee (diff)
Revert "Revert "Settled race condition TODOs across all platforms... as an unfortunate case :(""
Put this back on master so we can debug. This reverts commit 67adbd43a1bbf35fdc3963b34ae5631758006fee.
Diffstat (limited to 'redo/table_unix.go')
-rw-r--r--redo/table_unix.go18
1 files changed, 11 insertions, 7 deletions
diff --git a/redo/table_unix.go b/redo/table_unix.go
index 611beae..d618663 100644
--- a/redo/table_unix.go
+++ b/redo/table_unix.go
@@ -58,13 +58,17 @@ func (t *table) Lock() {
func (t *table) Unlock() {
t.unlock()
- // TODO RACE CONDITION HERE
- // not sure about this one...
- t.RLock()
- defer t.RUnlock()
- d := reflect.Indirect(reflect.ValueOf(t.data))
- new := C.gint(d.Len())
- C.tableUpdate(t.model, t.old, new)
+ // 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()
+ d := reflect.Indirect(reflect.ValueOf(t.data))
+ new := C.gint(d.Len())
+ C.tableUpdate(t.model, t.old, new)
+ })
+ }()
}
//export goTableModel_get_n_columns