git@vger.kernel.org list mirror (unofficial, one of many)
 help / color / mirror / code / Atom feed
* [PATCH 0/5] drop non-reentrant time usage
@ 2019-11-27 15:13 Doan Tran Cong Danh
  2019-11-27 15:13 ` [PATCH 1/5] date.c::datestamp: switch to reentrant localtime_r Doan Tran Cong Danh
                   ` (6 more replies)
  0 siblings, 7 replies; 15+ messages in thread
From: Doan Tran Cong Danh @ 2019-11-27 15:13 UTC (permalink / raw)
  To: git; +Cc: Doan Tran Cong Danh

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


^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2019-11-28 12:25 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-11-27 15:13 [PATCH 0/5] drop non-reentrant time usage Doan Tran Cong Danh
2019-11-27 15:13 ` [PATCH 1/5] date.c::datestamp: switch to reentrant localtime_r Doan Tran Cong Danh
2019-11-27 15:13 ` [PATCH 2/5] date.c::time_to_tm_local: use reentrant localtime_r(3) Doan Tran Cong Danh
2019-11-27 15:13 ` [PATCH 3/5] date.c::time_to_tm: use reentrant gmtime_r(3) Doan Tran Cong Danh
2019-11-27 15:13 ` [PATCH 4/5] archive-zip: use reentrant localtime_r(3) Doan Tran Cong Danh
2019-11-27 15:13 ` [PATCH 5/5] mingw: use {gm,local}time_s as backend for {gm,local}time_r Doan Tran Cong Danh
2019-11-27 19:35   ` Johannes Schindelin
2019-11-27 19:39   ` Johannes Schindelin
2019-11-28 12:05     ` Danh Doan
2019-11-27 16:29 ` [PATCH 0/5] drop non-reentrant time usage Jeff King
2019-11-28 12:16   ` Danh Doan
2019-11-28 12:25 ` [PATCH v2 0/3] Phase out non-reentrant time functions Doan Tran Cong Danh
2019-11-28 12:25   ` [PATCH v2 1/3] date.c: switch to reentrant {gm,local}time_r Doan Tran Cong Danh
2019-11-28 12:25   ` [PATCH v2 2/3] archive-zip.c: switch to reentrant localtime_r Doan Tran Cong Danh
2019-11-28 12:25   ` [PATCH v2 3/3] mingw: use {gm,local}time_s as backend for {gm,local}time_r Doan Tran Cong Danh

Code repositories for project(s) associated with this inbox:

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).