[PATCH 0/5] drop non-reentrant time usage
- From
Doan Tran Cong Danh <congdanhqx@gmail.com>
- Date
- Nov 27, 2019, 15:13 UTC
- Message-ID
- <cover.1574867409.git.congdanhqx@gmail.com>
gmtime/localtime is considered unsafe in multithread environment.
git was started as single-thread application, but we have some multi-thread code, right now.
replace all usage of gmtime/localtime by their respective reentrant ones.
On Linux (with both glibc and musl), we won't notice any differences in performance, since they implemented gmtime and gmtime_r mostly the same.
On Windows, we may be taxed, since gmtime_r and localtime_r is our compat functions, because we memcpy from returned data of gmtime/localtime.
To address that, I made patch #5 and included it together with this series. I'm not sure how much portable it is. It seems to run fine with my Windows 7 x86 and Windows 10 x64 VM, (inside git-sdk for Windows, if it matters). I'm Cc-ing j6t and Dscho on that patch to get their opinions.
Doan Tran Cong Danh (5):
date.c::datestamp: switch to reentrant localtime_r
date.c::time_to_tm_local: use reentrant localtime_r(3)
date.c::time_to_tm: use reentrant gmtime_r(3)
archive-zip: use reentrant localtime_r(3)
mingw: use {gm,local}time_s as backend for {gm,local}time_rarchive-zip.c | 10 +++++----- compat/mingw.c | 13 +++++++------ date.c | 18 ++++++++++-------- 3 files changed, 22 insertions(+), 19 deletions(-)
-- 2.24.0.158.gd77a74f4dd.dirty