From b198a4dfec53a15eac5cdca9fe9d91c145a0119c Mon Sep 17 00:00:00 2001 From: Pietro Gagliardi Date: Mon, 11 Aug 2014 14:16:23 -0400 Subject: Settled race condition TODOs across all platforms... as an unfortunate case :( --- redo/table_darwin.go | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) (limited to 'redo/table_darwin.go') 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 -- cgit v1.2.3