[RFC PATCH] kernel32: Use uselocale function to resture C locale for LC_CTYPE category.

Piotr Caban piotr.caban at gmail.com
Wed Mar 20 16:43:48 CDT 2019


Hi Ken,

On 3/20/19 10:11 PM, Ken Thomases wrote:
> As it turns out, the macOS implementation works differently than Linux/POSIX.  Maybe that's common to BSDs generally, I don't know.
> 
> In macOS's C library, the thread locale is freed on thread exit, for all threads.  The thread locale is stored in a thread-specific key with a destructor.  There is some internal reference counting, but the locale object itself is freed unconditionally so that doesn't help us any.  So, my concern about leaking was misplaced, as was my suggestion to avoid duplicating the locale for every thread.  But now there's a concern about glibc.
> 
> Also, on macOS, newlocale() never modifies nor frees base.  The new locale is always newly-created and independent from base and base is left alone.  (Internally, it duplicates base to create the new locale and then modifies it as per the mask and locale string.)
> 
> So, global_loc is leaked on macOS.
It's a shame it was not well standardized. It probably makes the 
function not suitable for us (unless all the other solutions are even 
worse).

> Kind of a mess. :(I've filled a bug to man-pages project regarding newlocale man page. 
According to valgrind sample code uses locale after it's being freed :)

Thanks,
Piotr



More information about the wine-devel mailing list