Daniel P. Berrangé <[email protected]> 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é <[email protected]>
[...]
> 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]