winpthreads: use `mbsrtowcs` instead of `mbstowcs`
`pthread_setname_np` function defined in thread.c uses `mbstowcs` function
which is not thread-safe. Use `mbsrtowcs` instead.
Signed-off-by: Kirill Makurin <maiddaisuki@outlook.com>
Signed-off-by: LIU Hao <lh_mouse@126.com>
diff --git a/mingw-w64-libraries/winpthreads/src/thread.c b/mingw-w64-libraries/winpthreads/src/thread.c
index 427f6a4..6a86472 100644
--- a/mingw-w64-libraries/winpthreads/src/thread.c
+++ b/mingw-w64-libraries/winpthreads/src/thread.c
@@ -28,6 +28,7 @@
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
+#include <wchar.h>
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
@@ -1862,13 +1863,14 @@
if (_pthread_set_thread_description != NULL)
{
- size_t required_size = mbstowcs(NULL, name, 0);
+ mbstate_t mbs = {0};
+ size_t required_size = mbsrtowcs(NULL, &name, 0, &mbs);
if (required_size != (size_t)-1)
{
wchar_t *wname = malloc((required_size + 1) * sizeof(wchar_t));
if (wname != NULL)
{
- mbstowcs(wname, name, required_size + 1);
+ mbsrtowcs(wname, &name, required_size + 1, &mbs);
_pthread_set_thread_description(tv->h, wname);
free(wname);
}