pgsql: Provide thread-safe pg_localeconv_r(). - Mailing list pgsql-committers

From Peter Eisentraut
Subject pgsql: Provide thread-safe pg_localeconv_r().
Date
Msg-id E1txk11-001F7W-0u@gemulon.postgresql.org
Whole thread Raw
List pgsql-committers
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

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/b98be8a2a2a6196dc24631dfe4d8785b86800d23

Modified Files
--------------
configure                         |   2 +-
configure.ac                      |   1 +
meson.build                       |   1 +
src/backend/utils/adt/pg_locale.c | 128 +++----------
src/include/pg_config.h.in        |   3 +
src/include/port.h                |   6 +
src/port/Makefile                 |   1 +
src/port/meson.build              |   1 +
src/port/pg_localeconv_r.c        | 368 ++++++++++++++++++++++++++++++++++++++
9 files changed, 403 insertions(+), 108 deletions(-)


pgsql-committers by date:

Previous
From: Álvaro Herrera
Date:
Subject: pgsql: Simplify syntax for ALTER TABLE ALTER CONSTRAINT NO INHERIT
Next
From: Peter Eisentraut
Date:
Subject: pgsql: Expand test a bit