thread-safety: gmtime_r(), localtime_r()

From: Peter Eisentraut <peter(at)eisentraut(dot)org>
To: pgsql-hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: thread-safety: gmtime_r(), localtime_r()
Date: 2024-06-26 18:42:23
Message-ID: eba1dc75-298e-4c46-8869-48ba8aad7d70@eisentraut.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Here is a patch for using gmtime_r() and localtime_r() instead of
gmtime() and localtime(), for thread-safety.

There are a few affected calls in libpq and ecpg's libpgtypes, which are
probably effectively bugs, because those libraries already claim to be
thread-safe.

There is one affected call in the backend. Most of the backend
otherwise uses the custom functions pg_gmtime() and pg_localtime(),
which are implemented differently.

Some portability fun: gmtime_r() and localtime_r() are in POSIX but are
not available on Windows. Windows has functions gmtime_s() and
localtime_s() that can fulfill the same purpose, so we can add some
small wrappers around them. (Note that these *_s() functions are also
different from the *_s() functions in the bounds-checking extension of
C11. We are not using those here.)

MinGW exposes neither *_r() nor *_s() by default. You can get at the
POSIX-style *_r() functions by defining _POSIX_C_SOURCE appropriately
before including <time.h>. (There is apparently probably also a way to
get at the Windows-style *_s() functions by supplying some additional
options or defines. But we might as well just use the POSIX ones.)

Attachment Content-Type Size
0001-thread-safety-gmtime_r-localtime_r.patch text/plain 5.5 KB

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Tom Lane 2024-06-26 18:42:49 Re: JIT causes core dump during error recovery
Previous Message Ranier Vilela 2024-06-26 18:28:33 Re: JIT causes core dump during error recovery