On 19.08.24 08:29, Thomas Munro wrote:
Here is a slightly better version of patch 0003.  I removed some
unnecessary refactoring, making the patch smaller.

FTR I wrote a small program[1] for CI to test the assumptions about
Windows in 0001.  I printed out the addresses of the objects, to
confirm that different threads were looking at different objects once
the thread local mode was activated, and also assert that the struct
contents were as expected while 8 threads switched locales in a tight
loop, and the output[2] looked OK to me.

[1] 
https://github.com/macdice/hello-windows/blob/793eb2fe3e6738c200781f681a22a7e6358f39e5/test.c
[2] https://cirrus-ci.com/task/4650412253380608

Review of the patch v5-0002-Use-thread-safe-strftime_l-instead-of-strftime.patch:

This all looks very sensible. My only comment on the code is that for handling error returns from newlocale() and _create_locale() we already have report_newlocale_failure(), which handles various special cases. (But it doesn't do the _dosmaperr() that your patch does.) It would be best if you used that as well (and maybe improve as needed).

A couple of comments on the commit message:

> Use thread-safe strftime_l() instead of strftime().

I don't think this is about thread-safety of either function? It's more that the latter requires a non-thread-safe code structure around it. I would frame this more around the use-locale_t-everywhere theme than the thread-safety theme.

> While here, adjust error message for strftime_l() failure: it does not
> set errno, so no %m.

Although POSIX says that strftime() and strftime_l() should change errno, experimentation shows that they do not. So this is fine. But I thought also that the previous code was problematic because errno could be overwritten since the failing call, so you wouldn't get a very accurate error message anyway.



Reply via email to