Provide thread-safe pg_localeconv_r().
Peter Eisentraut <peter@eisentraut.org>
Provide thread-safe pg_localeconv_r(). This involves four different implementation strategies: 1. For Windows, we now require _configthreadlocale() to be available and work (commit f1da075d9a0), and the documentation says that the object returned by localeconv() is in thread-local memory. 2. For glibc, we translate to nl_langinfo_l() calls, because it offers the same information that way as an extension, and that API is thread-safe. 3. For macOS/*BSD, use localeconv_l(), which is thread-safe. 4. For everything else, use uselocale() to set the locale for the thread, and use a big ugly lock to defend against the returned object being concurrently clobbered. In practice this currently means only Solaris. The new call is used in pg_locale.c, replacing calls to setlocale() and localeconv(). Author: Thomas Munro <thomas.munro@gmail.com> Reviewed-by: Heikki Linnakangas <hlinnaka@iki.fi> Reviewed-by: Peter Eisentraut <peter@eisentraut.org> Discussion: https://postgr.es/m/CA%2BhUKGJqVe0%2BPv9dvC9dSums_PXxGo9SWcxYAMBguWJUGbWz-A%40mail.gmail.com
Files
| Path | Change | +/− |
|---|---|---|
| configure | modified | +1 −1 |
| configure.ac | modified | +1 −0 |
| meson.build | modified | +1 −0 |
| src/backend/utils/adt/pg_locale.c | modified | +21 −107 |
| src/include/pg_config.h.in | modified | +3 −0 |
| src/include/port.h | modified | +6 −0 |
| src/port/Makefile | modified | +1 −0 |
| src/port/meson.build | modified | +1 −0 |
| src/port/pg_localeconv_r.c | added | +368 −0 |
Discussion
- Thread-safe nl_langinfo() and localeconv() 21 messages · 2024-08-13 → 2025-04-04