diff --git a/lib/libc/locale/xlocale.c b/lib/libc/locale/xlocale.c index c1995179463e..4bc0f5887f67 100644 --- a/lib/libc/locale/xlocale.c +++ b/lib/libc/locale/xlocale.c @@ -251,6 +251,7 @@ static int dupcomponent(int type, locale_t base, locale_t new) locale_t newlocale(int mask, const char *locale, locale_t base) { + locale_t _base; int type; const char *realLocale = locale; int useenv = 0; @@ -263,6 +264,7 @@ locale_t newlocale(int mask, const char *locale, locale_t base) return (NULL); } + _base = base; FIX_LOCALE(base); copyflags(new, base); @@ -297,6 +299,8 @@ locale_t newlocale(int mask, const char *locale, locale_t base) if (0 == success) { xlocale_release(new); new = NULL; + } else if (base == _base) { + xlocale_release(base); } return (new);