diff options
author | Matthias Sohn <matthias.sohn@sap.com> | 2018-03-07 22:37:27 +0100 |
---|---|---|
committer | Matthias Sohn <matthias.sohn@sap.com> | 2018-03-07 22:37:50 +0100 |
commit | 0d79bcf151cb20547ac5899b00db5e7b9246a0d1 (patch) | |
tree | 447250bd0c3a044e30d9768ac1bf3ac59281eac5 /org.eclipse.jgit/src/org/eclipse | |
parent | 0f9ec9e406b903ab9be6a95e15a282da9a6c5512 (diff) | |
parent | 95fc2b210f3df3a1ff5c729dbc0624e3d25d34bd (diff) | |
download | jgit-0d79bcf151cb20547ac5899b00db5e7b9246a0d1.tar.gz jgit-0d79bcf151cb20547ac5899b00db5e7b9246a0d1.zip |
Merge branch 'stable-4.10'
* stable-4.10:
Don't subclass ThreadLocal to avoid memory leak in NLS
Set context classloader to null in WorkQueue
Change-Id: Idacf9a15a27f8e1d73357a80ed11a02237eea49e
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
Diffstat (limited to 'org.eclipse.jgit/src/org/eclipse')
-rw-r--r-- | org.eclipse.jgit/src/org/eclipse/jgit/lib/internal/WorkQueue.java | 1 | ||||
-rw-r--r-- | org.eclipse.jgit/src/org/eclipse/jgit/nls/NLS.java | 26 |
2 files changed, 18 insertions, 9 deletions
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/lib/internal/WorkQueue.java b/org.eclipse.jgit/src/org/eclipse/jgit/lib/internal/WorkQueue.java index e3f65ae7ba..8f8aad52d7 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/lib/internal/WorkQueue.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/lib/internal/WorkQueue.java @@ -71,6 +71,7 @@ public class WorkQueue { public Thread newThread(Runnable taskBody) { Thread thr = baseFactory.newThread(taskBody); thr.setName("JGit-WorkQueue"); //$NON-NLS-1$ + thr.setContextClassLoader(null); thr.setDaemon(true); return thr; } 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 3c0d839dfb..89a87af9eb 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/nls/NLS.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/nls/NLS.java @@ -74,12 +74,7 @@ public class NLS { */ public static final Locale ROOT_LOCALE = new Locale("", "", ""); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - private static final InheritableThreadLocal<NLS> local = new InheritableThreadLocal<NLS>() { - @Override - protected NLS initialValue() { - return new NLS(Locale.getDefault()); - } - }; + private static final InheritableThreadLocal<NLS> local = new InheritableThreadLocal<>(); /** * Sets the locale for the calling thread. @@ -99,10 +94,19 @@ public class NLS { /** * Sets the JVM default locale as the locale for the calling thread. * <p> - * Semantically this is equivalent to <code>NLS.setLocale(Locale.getDefault())</code>. + * Semantically this is equivalent to + * <code>NLS.setLocale(Locale.getDefault())</code>. */ public static void useJVMDefaultLocale() { - local.set(new NLS(Locale.getDefault())); + useJVMDefaultInternal(); + } + + // TODO(ms): change signature of public useJVMDefaultLocale() in 5.0 to get + // rid of this internal method + private static NLS useJVMDefaultInternal() { + NLS b = new NLS(Locale.getDefault()); + local.set(b); + return b; } /** @@ -122,7 +126,11 @@ public class NLS { * {@link org.eclipse.jgit.errors.TranslationStringMissingException} */ public static <T extends TranslationBundle> T getBundleFor(Class<T> type) { - return local.get().get(type); + NLS b = local.get(); + if (b == null) { + b = useJVMDefaultInternal(); + } + return b.get(type); } final private Locale locale; |