mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-31 05:40:04 +00:00 
			
		
		
		
	Fix thread naming on Linux, which limits names to 15 bytes.
- In `SetCurrentThreadName`, when on Linux, truncate to 15 bytes, as (at least on glibc) `pthread_set_name_np` will otherwise return `ERANGE` and do nothing. - Also, add logging in case `pthread_set_name_np` returns an error anyway. This is Linux-specific, as the Apple and BSD versions of `pthread_set_name_np return `void`. - Change the name for CPU threads in multi-core mode from "yuzu:CoreCPUThread_N" (19 bytes) to "yuzu:CPUCore_N" (14 bytes) so it fits into the Linux limit. Some other thread names are also cut off, but I didn't bother addressing them as you can guess them from the truncated versions. For a CPU thread, truncation means you can't see which core it is!
This commit is contained in:
		
							parent
							
								
									6a77547bde
								
							
						
					
					
						commit
						2ba35cab73
					
				
					 1 changed files with 11 additions and 0 deletions
				
			
		|  | @ -2,6 +2,8 @@ | ||||||
| // Licensed under GPLv2 or any later version
 | // Licensed under GPLv2 or any later version
 | ||||||
| // Refer to the license.txt file included.
 | // Refer to the license.txt file included.
 | ||||||
| 
 | 
 | ||||||
|  | #include "common/common_funcs.h" | ||||||
|  | #include "common/logging/log.h" | ||||||
| #include "common/thread.h" | #include "common/thread.h" | ||||||
| #ifdef __APPLE__ | #ifdef __APPLE__ | ||||||
| #include <mach/mach.h> | #include <mach/mach.h> | ||||||
|  | @ -18,6 +20,7 @@ | ||||||
| #ifndef _WIN32 | #ifndef _WIN32 | ||||||
| #include <unistd.h> | #include <unistd.h> | ||||||
| #endif | #endif | ||||||
|  | #include <string> | ||||||
| 
 | 
 | ||||||
| #ifdef __FreeBSD__ | #ifdef __FreeBSD__ | ||||||
| #define cpu_set_t cpuset_t | #define cpu_set_t cpuset_t | ||||||
|  | @ -64,6 +67,14 @@ void SetCurrentThreadName(const char* name) { | ||||||
|     pthread_set_name_np(pthread_self(), name); |     pthread_set_name_np(pthread_self(), name); | ||||||
| #elif defined(__NetBSD__) | #elif defined(__NetBSD__) | ||||||
|     pthread_setname_np(pthread_self(), "%s", (void*)name); |     pthread_setname_np(pthread_self(), "%s", (void*)name); | ||||||
|  | #elif defined(__linux__) | ||||||
|  |     // Linux limits thread names to 15 characters and will outright reject any
 | ||||||
|  |     // attempt to set a longer name with ERANGE.
 | ||||||
|  |     std::string truncated(name, std::min(strlen(name), static_cast<size_t>(15))); | ||||||
|  |     if (int e = pthread_setname_np(pthread_self(), truncated.c_str())) { | ||||||
|  |         errno = e; | ||||||
|  |         LOG_ERROR(Common, "Failed to set thread name to '{}': {}", truncated, GetLastErrorMsg()); | ||||||
|  |     } | ||||||
| #else | #else | ||||||
|     pthread_setname_np(pthread_self(), name); |     pthread_setname_np(pthread_self(), name); | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue