Fix race condition in config.Getenv
The envDeps map may be accessed concurrently by multiple modules
in GenerateBuildActions, wrap the accesses in a mutex.
Change-Id: I18abf2687997c045a99b987908623f7d8c2ea344
diff --git a/common/config.go b/common/config.go
index a6837c1..5d761e6 100644
--- a/common/config.go
+++ b/common/config.go
@@ -20,6 +20,7 @@
"os"
"path/filepath"
"runtime"
+ "sync"
)
// The configuration file name
@@ -44,6 +45,8 @@
FileConfigurableOptions
srcDir string // the path of the root source directory
+
+ envLock sync.Mutex
envDeps map[string]string
}
@@ -166,10 +169,12 @@
func (c *config) Getenv(key string) string {
var val string
var exists bool
+ c.envLock.Lock()
if val, exists = c.envDeps[key]; !exists {
val = os.Getenv(key)
c.envDeps[key] = val
}
+ c.envLock.Unlock()
return val
}