diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/nls/NLS.java b/org.eclipse.jgit/src/org/eclipse/jgit/nls/NLS.java index 6f81af845..219b0a163 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/nls/NLS.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/nls/NLS.java @@ -125,11 +125,16 @@ public class NLS { this.locale = locale; } + @SuppressWarnings("unchecked") private T get(Class type) { TranslationBundle bundle = map.get(type); if (bundle == null) { bundle = GlobalBundleCache.lookupBundle(locale, type); - map.putIfAbsent(type, bundle); + // There is a small opportunity for a race, which we may + // lose. Accept defeat and return the winner's instance. + TranslationBundle old = map.putIfAbsent(type, bundle); + if (old != null) + bundle = old; } return (T) bundle; }