@@ -1411,7 +1411,7 @@
$(CHECK)
.PHONY: rand/check
-reflect/libreflect.a: $(go_reflect_files) runtime.gox strconv.gox
+reflect/libreflect.a: $(go_reflect_files) runtime.gox strconv.gox sync.gox
$(BUILDARCHIVE)
reflect/libreflect.la: reflect/libreflect.a
reflect/check: $(CHECK_DEPS)
@@ -18,6 +18,7 @@
import (
"runtime"
"strconv"
+ "sync"
"unsafe"
)
@@ -597,6 +598,8 @@
// Canonicalize a Type.
var canonicalType = make(map[string]Type)
+var canonicalTypeLock sync.Mutex
+
func canonicalize(t Type) Type {
u := t.uncommon()
var s string
@@ -605,10 +608,13 @@
} else {
s = u.PkgPath() + "." + u.Name()
}
+ canonicalTypeLock.Lock()
if r, ok := canonicalType[s]; ok {
+ canonicalTypeLock.Unlock()
return r
}
canonicalType[s] = t
+ canonicalTypeLock.Unlock()
return t
}