• Tom Lane's avatar
    Avoid thread-safety problem in ecpglib. · 8eb4a931
    Tom Lane authored
    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.
    
    This should get back-patched, but let's see what the buildfarm
    thinks of it first.
    
    Michael Meskes and Tom Lane; thanks also to Takayuki Tsunakawa.
    
    Discussion: https://postgr.es/m/31420.1547783697@sss.pgh.pa.us
    8eb4a931
pg_config.h.win32 22.9 KB