Hi Chip, On 1/27/20 3:18 AM, Chip Davis wrote:
MSVCRT__locale_t CDECL MSVCRT__get_current_locale(void) { + int i; MSVCRT__locale_t loc = MSVCRT_malloc(sizeof(MSVCRT__locale_tstruct)); if(!loc) return NULL;
- loc->locinfo = get_locinfo(); - loc->mbcinfo = get_mbcinfo(); - InterlockedIncrement(&loc->locinfo->refcount); - InterlockedIncrement(&loc->mbcinfo->refcount); + loc->locinfo = MSVCRT_malloc(sizeof(MSVCRT_threadlocinfo)); + loc->mbcinfo = MSVCRT_malloc(sizeof(MSVCRT_threadmbcinfo)); A quick testing shows that consecutive _get_current_locale calls return identical locinfo/mbcinfo pointers. It's probably the setlocale function that needs to not reuse some strctures when refcount was icreased.
Thanks, Piotr