From c97216e4f0f3021b12cd3803e512393be569c886 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Sat, 4 Nov 2017 09:43:35 +0100 Subject: [PATCH] i18n: Prevent data race in lang code handling See #3564 --- i18n/i18n.go | 2 ++ i18n/translationProvider.go | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/i18n/i18n.go b/i18n/i18n.go index 73417fb3..6cc3d0b3 100644 --- a/i18n/i18n.go +++ b/i18n/i18n.go @@ -68,7 +68,9 @@ func (t Translator) initFuncs(bndl *bundle.Bundle) { currentLang := lang t.translateFuncs[currentLang] = func(translationID string, args ...interface{}) string { + tpMu.RLock() tFunc, err := bndl.Tfunc(currentLang) + tpMu.RUnlock() if err != nil { jww.WARN.Printf("could not load translations for language %q (%s), will use default content language.\n", lang, err) } diff --git a/i18n/translationProvider.go b/i18n/translationProvider.go index 663a8dd5..556ee7a9 100644 --- a/i18n/translationProvider.go +++ b/i18n/translationProvider.go @@ -25,7 +25,7 @@ import ( // Unfortunately this needs to be global, see // https://github.com/nicksnyder/go-i18n/issues/82 -var tpMu sync.Mutex +var tpMu sync.RWMutex // TranslationProvider provides translation handling, i.e. loading // of bundles etc.