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 67adbd43a1.
This commit is contained in:
Pietro Gagliardi 2014-08-11 19:38:21 -04:00
parent 67adbd43a1
commit 166eaeb7db
3 changed files with 29 additions and 17 deletions

View File

@ -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...
// 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

View File

@ -58,13 +58,17 @@ func (t *table) Lock() {
func (t *table) Unlock() {
t.unlock()
// TODO RACE CONDITION HERE
// not sure about this one...
// 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

View File

@ -38,11 +38,15 @@ func finishNewTable(b *tablebase, ty reflect.Type) Table {
func (t *table) Unlock() {
t.unlock()
// TODO RACE CONDITION HERE
// I think there's a way to set the item count without causing a refetch of data that works around this...
// 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._hwnd, C.int(reflect.Indirect(reflect.ValueOf(t.data)).Len()))
})
}()
}
//export tableGetCellText