thread-safety: gmtime_r(), localtime_r()
От | Peter Eisentraut |
---|---|
Тема | thread-safety: gmtime_r(), localtime_r() |
Дата | |
Msg-id | eba1dc75-298e-4c46-8869-48ba8aad7d70@eisentraut.org обсуждение исходный текст |
Ответы |
Re: thread-safety: gmtime_r(), localtime_r()
Re: thread-safety: gmtime_r(), localtime_r() |
Список | 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.)
Вложения
В списке pgsql-hackers по дате отправления: