> Subject: [PATCH v3 1/6] eal: add function that sets thread name > > External email: Use caution opening links or attachments > > > From: Narcisa Vasile <navas...@microsoft.com> > > Implement function that sets the name of a thread. > On Windows, SetThreadDescription() is used. Use GetProcAddress() to obtain > the address of the function for MinGW compatibility. > > Signed-off-by: Narcisa Vasile <navas...@microsoft.com> > --- > lib/eal/common/rte_thread.c | 17 +++++++++ lib/eal/include/rte_thread.h | > 16 +++++++++ > lib/eal/version.map | 1 + > lib/eal/windows/rte_thread.c | 68 > ++++++++++++++++++++++++++++++++++++ > 4 files changed, 102 insertions(+)
<snip> > +RTE_INIT(rte_thread_description_ptr_init) > +{ > + HMODULE kernel_lib = NULL; > + static const char library_name[] = "kernel32.dll"; > + static const char function[] = "SetThreadDescription"; > + > + kernel_lib = LoadLibraryA(library_name); > + if (kernel_lib == NULL) { > + (void)thread_log_last_error("LoadLibraryA(\"kernel32.dll\")"); > + return; > + } > + > + SetThreadDescription_ptr = (SetThreadDescription_type)( > + (void *)GetProcAddress(kernel_lib, function)); > + if (SetThreadDescription_ptr == NULL) { > + (void)thread_log_last_error("GetProcAddress(\"kernel32.dll\", > \"SetThreadDescription\")"); > + return; You need to remove the return above to also free kernel32.dll in error flow. > + } > + > + FreeLibrary(kernel_lib); > +} > + > +int > +rte_thread_name_set(rte_thread_t thread_id, const char *name) { > + int ret = 0; > + size_t count; > + HRESULT hr; > + HANDLE thread_handle = NULL; > + WCHAR w_name[16]; > + > + thread_handle = OpenThread(THREAD_SET_LIMITED_INFORMATION, > FALSE, > + thread_id.opaque_id); > + if (thread_handle == NULL) { > + ret = thread_log_last_error("OpenThread()"); > + goto cleanup; > + } > + > + count = mbstowcs(w_name, name, RTE_DIM(w_name)); > + if (count == (size_t) (-1)) { > + RTE_LOG(DEBUG, EAL, "Invalid thread name!\n"); > + ret = EINVAL; > + goto cleanup; > + } > + > + if (SetThreadDescription_ptr == NULL) { > + RTE_LOG(DEBUG, EAL, "Invalid function pointer to > SetThreadDescription()!\n"); > + ret = EINVAL; > + goto cleanup; > + } > + > + hr = SetThreadDescription_ptr(thread_handle, w_name); > + if (FAILED(hr)) { > + ret = thread_log_last_error("SetThreadDescription()"); > + goto cleanup; > + } > + > +cleanup: > + if (thread_handle != NULL) > + CloseHandle(thread_handle); > + return ret; > +} > + > int > rte_thread_key_create(rte_thread_key *key, > __rte_unused void (*destructor)(void *)) > -- > 2.31.0.vfs.0.1