mirror of
https://git.sr.ht/~eliasnaur/gio
synced 2026-07-01 23:55:39 +00:00
4e0d820a5b
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>
28 lines
422 B
Go
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
|
|
}
|