Files
gio/ui/app/datadir_android.go
T
Elias Naur 4e0d820a5b ui/app: (android) block until DataDir is ready
The app data dir is not set until after Go's init functions have
run, which means that DataDir is inherently racy. Avoid that race
by blocking in DataDir until it is set from Java.
In other words, trade a race condition with a deadlock.

Signed-off-by: Elias Naur <mail@eliasnaur.com>
2019-07-22 09:37:48 +02:00

28 lines
422 B
Go

// SPDX-License-Identifier: Unlicense OR MIT
// +build android
package app
import "C"
import "sync"
var (
dataDirOnce sync.Once
dataDirChan = make(chan string, 1)
dataPath string
)
func dataDir() (string, error) {
dataDirOnce.Do(func() {
dataPath = <-dataDirChan
})
return dataPath, nil
}
//export setDataDir
func setDataDir(cdir *C.char, len C.int) {
dir := C.GoStringN(cdir, len)
dataDirChan <- dir
}