]> source.dussan.org Git - poi.git/commitdiff
bug 59805: avoid memory leaks if time zone or locale are never set or user never...
authorJaven O'Neal <onealj@apache.org>
Thu, 7 Jul 2016 01:10:24 +0000 (01:10 +0000)
committerJaven O'Neal <onealj@apache.org>
Thu, 7 Jul 2016 01:10:24 +0000 (01:10 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1751739 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/poi/util/LocaleUtil.java

index 54a8d6c0ec848c60eadfe5781629d222f060daee..81bdd4a079db5e589cd6786d25aa31f30ebc883f 100644 (file)
@@ -52,21 +52,8 @@ public final class LocaleUtil {
      */\r
     public static final Charset CHARSET_1252 = Charset.forName("CP1252");\r
 \r
-    private static final ThreadLocal<TimeZone> userTimeZone = new ThreadLocal<TimeZone>() {\r
-        @Override\r
-        @SuppressForbidden("implementation around default locales in POI")\r
-        protected TimeZone initialValue() {\r
-            return TimeZone.getDefault();\r
-        }\r
-    };\r
-\r
-    private static final ThreadLocal<Locale> userLocale = new ThreadLocal<Locale>() {\r
-        @Override\r
-        @SuppressForbidden("implementation around default locales in POI")\r
-        protected Locale initialValue() {\r
-            return Locale.getDefault();\r
-        }\r
-    };\r
+    private static final ThreadLocal<TimeZone> userTimeZone = new ThreadLocal<TimeZone>();\r
+    private static final ThreadLocal<Locale> userLocale = new ThreadLocal<Locale>();\r
     \r
     /**\r
      * As time zone information is not stored in any format, it can be\r
@@ -80,12 +67,17 @@ public final class LocaleUtil {
     }\r
     \r
     /**\r
-     * @return the time zone which is used for date calculations, defaults to UTC\r
-     */\r
+     * @return the time zone which is used for date calculations. If not set, returns {@link TimeZone#getDefault()}.\r
+     */
+    @SuppressForbidden("implementation around default locales in POI")\r
     public static TimeZone getUserTimeZone() {\r
-        return userTimeZone.get();\r
+        TimeZone timeZone = userTimeZone.get();
+        return (timeZone != null) ? timeZone : TimeZone.getDefault();\r
     }\r
-    \r
+
+    /**
+     * Clear the thread-local user time zone.
+     */    \r
     public static void resetUserTimeZone() {\r
         userTimeZone.remove();\r
     }\r
@@ -98,15 +90,17 @@ public final class LocaleUtil {
         userLocale.set(locale);\r
     }\r
     \r
-    public static void resetUserLocale() {\r
-        userLocale.remove();\r
-    }\r
-\r
     /**\r
-     * @return the default user locale, defaults to {@link Locale#ROOT}\r
-     */\r
+     * @return the default user locale. If not set, returns {@link Locale#getDefault()}.\r
+     */
+    @SuppressForbidden("implementation around default locales in POI")\r
     public static Locale getUserLocale() {\r
-        return userLocale.get();\r
+        Locale locale = userLocale.get();
+        return (locale != null) ? locale : Locale.getDefault();\r
+    }
+
+    public static void resetUserLocale() {\r
+        userLocale.remove();\r
     }\r
 \r
     /**\r