pgsql: Avoid thread-safety problem in ecpglib.

Поиск
Список
Период
Сортировка
От Tom Lane
Тема pgsql: Avoid thread-safety problem in ecpglib.
Дата
Msg-id E1glnX2-00024r-1D@gemulon.postgresql.org
обсуждение исходный текст
Список pgsql-committers
Avoid thread-safety problem in ecpglib.

ecpglib attempts to force the LC_NUMERIC locale to "C" while reading
server output, to avoid problems with strtod() and related functions.
Historically it's just issued setlocale() calls to do that, but that
has major problems if we're in a threaded application.  setlocale()
itself is not required by POSIX to be thread-safe (and indeed is not,
on recent OpenBSD).  Moreover, its effects are process-wide, so that
we could cause unexpected results in other threads, or another thread
could change our setting.

On platforms having uselocale(), which is required by POSIX:2008,
we can avoid these problems by using uselocale() instead.  Windows
goes its own way as usual, but we can make it safe by using
_configthreadlocale().  Platforms having neither continue to use the
old code, but that should be pretty much nobody among current systems.

(Subsequent buildfarm results show that recent NetBSD versions still
lack uselocale(), but it's not a big problem because they also do not
support non-"C" settings for LC_NUMERIC.)

Back-patch of commits 8eb4a9312 and ee27584c4.

Michael Meskes and Tom Lane; thanks also to Takayuki Tsunakawa.

Discussion: https://postgr.es/m/31420.1547783697@sss.pgh.pa.us

Branch
------
REL9_4_STABLE

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

Modified Files
--------------
configure                                | 13 +++++++++-
configure.in                             | 29 +++++++++++++++++++++-
src/include/pg_config.h.in               |  6 +++++
src/include/pg_config.h.win32            |  6 +++++
src/interfaces/ecpg/ecpglib/descriptor.c | 37 ++++++++++++++++++++++------
src/interfaces/ecpg/ecpglib/execute.c    | 42 +++++++++++++++++++++++++++++++-
src/interfaces/ecpg/ecpglib/extern.h     | 11 +++++++++
7 files changed, 134 insertions(+), 10 deletions(-)


В списке pgsql-committers по дате отправления:

Предыдущее
От: Michael Paquier
Дата:
Сообщение: pgsql: Adjust documentation for vacuumdb --disable-page-skipping
Следующее
От: Andres Freund
Дата:
Сообщение: pgsql: llvm: Fix file-ending in IDENTIFICATION comments.