summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Colin Cross <ccross@android.com> 2019-06-03 15:07:03 -0700
committer Colin Cross <ccross@android.com> 2019-06-03 15:52:27 -0700
commitcefa94bd27f696b975cc7c3dc97ba7ecc91ef0cc (patch)
treeb8208cfa18747a5720a0566e7e93ffd407bc73e1
parent06b2c69cfecaef535b1e1ccfd256d840dc80afe4 (diff)
Fix data race and ordering consistency in apex modules
apexDepsMutator can be called on multiple apex modules in parallel, and then two goroutines could call BuildForApex on the same module in parallel, leading to a data race appending to apexVariations. This also results in random ordering of the entries in apexVariations. Hold a mutex around appending to apexVariations, and sort it before passing it to ctx.CreateVariations. Fixes: 134425751 Test: m nothing Change-Id: If5a3b53a778daacb3e26ac05cde872cf8eb980b3
-rw-r--r--android/apex.go8
1 files changed, 7 insertions, 1 deletions
diff --git a/android/apex.go b/android/apex.go
index bf11ba25f..17df76240 100644
--- a/android/apex.go
+++ b/android/apex.go
@@ -15,6 +15,7 @@
package android
import (
+ "sort"
"sync"
"github.com/google/blueprint"
@@ -86,7 +87,9 @@ type ApexModuleBase struct {
ApexProperties ApexProperties
canHaveApexVariants bool
- apexVariations []string
+
+ apexVariationsLock sync.Mutex // protects apexVariations during parallel apexDepsMutator
+ apexVariations []string
}
func (m *ApexModuleBase) apexModuleBase() *ApexModuleBase {
@@ -94,6 +97,8 @@ func (m *ApexModuleBase) apexModuleBase() *ApexModuleBase {
}
func (m *ApexModuleBase) BuildForApex(apexName string) {
+ m.apexVariationsLock.Lock()
+ defer m.apexVariationsLock.Unlock()
if !InList(apexName, m.apexVariations) {
m.apexVariations = append(m.apexVariations, apexName)
}
@@ -122,6 +127,7 @@ func (m *ApexModuleBase) IsInstallableToApex() bool {
func (m *ApexModuleBase) CreateApexVariations(mctx BottomUpMutatorContext) []blueprint.Module {
if len(m.apexVariations) > 0 {
+ sort.Strings(m.apexVariations)
variations := []string{""} // Original variation for platform
variations = append(variations, m.apexVariations...)