From 3aa25d7c39b51c6f335eedbde80698bd6960badb Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Fri, 14 Feb 2025 14:47:52 +0100 Subject: [PATCH v6.1 5/5] fixup! Use thread-safe strftime_l() instead of strftime(). --- src/backend/utils/adt/pg_locale.c | 9 ++------- src/backend/utils/adt/pg_locale_libc.c | 3 +-- src/include/utils/pg_locale.h | 1 + 3 files changed, 4 insertions(+), 9 deletions(-) diff --git a/src/backend/utils/adt/pg_locale.c b/src/backend/utils/adt/pg_locale.c index cb39a0fcdf3..44621acf9c9 100644 --- a/src/backend/utils/adt/pg_locale.c +++ b/src/backend/utils/adt/pg_locale.c @@ -766,13 +766,8 @@ cache_locale_time(void) #else locale = newlocale(LC_ALL_MASK, locale_time, (locale_t) 0); #endif - if (locale == (locale_t) 0) - { - if (errno == ENOMEM) - elog(ERROR, "out of memory"); - - elog(ERROR, "coud not create locale \"%s\": %m", locale_time); - } + if (!locale) + report_newlocale_failure(locale_time); /* We use times close to current time as data for strftime(). */ timenow = time(NULL); diff --git a/src/backend/utils/adt/pg_locale_libc.c b/src/backend/utils/adt/pg_locale_libc.c index 8f9a8637897..199857e22db 100644 --- a/src/backend/utils/adt/pg_locale_libc.c +++ b/src/backend/utils/adt/pg_locale_libc.c @@ -59,7 +59,6 @@ static size_t strnxfrm_libc(char *dest, size_t destsize, extern char *get_collation_actual_version_libc(const char *collcollate); static locale_t make_libc_collator(const char *collate, const char *ctype); -static void report_newlocale_failure(const char *localename); #ifdef WIN32 static int strncoll_libc_win32_utf8(const char *arg1, ssize_t len1, @@ -801,7 +800,7 @@ strncoll_libc_win32_utf8(const char *arg1, ssize_t len1, const char *arg2, #endif /* WIN32 */ /* simple subroutine for reporting errors from newlocale() */ -static void +void report_newlocale_failure(const char *localename) { int save_errno; diff --git a/src/include/utils/pg_locale.h b/src/include/utils/pg_locale.h index c22f8c762e6..32a41913c3f 100644 --- a/src/include/utils/pg_locale.h +++ b/src/include/utils/pg_locale.h @@ -155,6 +155,7 @@ extern int builtin_locale_encoding(const char *locale); extern const char *builtin_validate_locale(int encoding, const char *locale); extern void icu_validate_locale(const char *loc_str); extern char *icu_language_tag(const char *loc_str, int elevel); +extern void report_newlocale_failure(const char *localename); /* These functions convert from/to libc's wchar_t, *not* pg_wchar_t */ extern size_t wchar2char(char *to, const wchar_t *from, size_t tolen, -- 2.48.1