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_r archive-zip.c | 10 +++++----- compat/mingw.c | 13 +++++++------ date.c | 18 ++++++++++-------- 3 files changed, 22 insertions(+), 19 deletions(-) -- 2.24.0.158.gd77a74f4dd.dirty