Daniel P. Berrangé <berra...@redhat.com> writes: > This will be used to include the thread name in error reports > in a later patch. It returns a const string stored in a thread > local to avoid memory allocation when it is called repeatedly > in a single thread. This makes the assumption that the thread > name is set at the very start of the thread, which is the case > when using qemu_thread_create. > > Signed-off-by: Daniel P. Berrangé <berra...@redhat.com>
[...] > diff --git a/util/qemu-thread-win32.c b/util/qemu-thread-win32.c > index 7a734a7a09..e3789c20d1 100644 > --- a/util/qemu-thread-win32.c > +++ b/util/qemu-thread-win32.c [...] > @@ -412,3 +418,38 @@ bool qemu_thread_is_self(QemuThread *thread) > { > return GetCurrentThreadId() == thread->tid; > } > + > +static __thread char namebuf[64]; > + > +const char *qemu_thread_get_name(void) > +{ > + HRESULT hr; > + wchar_t *namew = NULL; > + g_autofree char *name = NULL; > + > + if (namebuf[0] != '\0') { > + return namebuf; > + } > + > + if (!load_thread_description()) { > + goto error; > + } > + > + hr = GetThreadDescriptionFunc(GetCurrentThread(), &namew); > + if (!SUCCEEDED(hr)) { > + goto error; > + } > + > + name = g_utf16_to_utf8(namew, -1, NULL, NULL, NULL); > + LocalFree(namew); > + if (!name) { > + goto error; > + } > + > + g_strlcpy(namebuf, name, G_N_ELEMENTS(namebuf)); > + return namebuf; > + > + error: > + strlcpy(namebuf, "unnamed", G_N_ELEMENTS(namebuf)); > + return namebuf; > +} ../util/qemu-thread-win32.c: In function 'qemu_thread_get_name': ../util/qemu-thread-win32.c:453:5: error: implicit declaration of function 'strlcpy'; did you mean 'strncpy'? [-Wimplicit-function-declaration] 453 | strlcpy(namebuf, "unnamed", G_N_ELEMENTS(namebuf)); | ^~~~~~~ | strncpy ../util/qemu-thread-win32.c:453:5: error: nested extern declaration of 'strlcpy' [-Werror=nested-externs]