Prevent concurrent read/writes to a map

This should hopefully fix an intermittent flake in bp2build, which is
now run by default.

Test: go build ./android
Change-Id: Ic257a34448ab323df1680cf1990b087ed415a592
diff --git a/android/proto.go b/android/proto.go
index b9365a7..a44daf0 100644
--- a/android/proto.go
+++ b/android/proto.go
@@ -17,6 +17,7 @@
 import (
 	"path/filepath"
 	"strings"
+	"sync"
 
 	"android/soong/bazel"
 
@@ -348,6 +349,7 @@
 var (
 	protoIncludeDirGeneratedSuffix = ".include_dir_bp2build_generated_proto"
 	protoIncludeDirsBp2buildKey    = NewOnceKey("protoIncludeDirsBp2build")
+	protoIncludeDirsBp2buildLock   sync.Mutex
 )
 
 func getProtoIncludeDirsBp2build(config Config) *map[protoIncludeDirKey]bool {
@@ -367,6 +369,9 @@
 // might create the targets in a subdirectory of `includeDir`
 // Returns the labels of the proto_library targets
 func createProtoLibraryTargetsForIncludeDirs(ctx Bp2buildMutatorContext, includeDirs []string) bazel.LabelList {
+	protoIncludeDirsBp2buildLock.Lock()
+	defer protoIncludeDirsBp2buildLock.Unlock()
+
 	var ret bazel.LabelList
 	for _, dir := range includeDirs {
 		if exists, _, _ := ctx.Config().fs.Exists(filepath.Join(dir, "Android.bp")); !exists {