Skip to content

Commit

Permalink
Detect pthread_setname_np with CMake
Browse files Browse the repository at this point in the history
In some non-standard setups that slip through our checks, this function
doesn't exist and we should guard against calling it. Since it's only
used for debugging, let's just use CMake to check if it's defined in the
header rather than complicated conditionals in the code for the 4
different possible versions of this that might exist.
  • Loading branch information
dpogue committed May 30, 2024
1 parent 2627724 commit 43d05e0
Show file tree
Hide file tree
Showing 3 changed files with 7 additions and 2 deletions.
4 changes: 3 additions & 1 deletion Sources/Plasma/CoreLib/hsThread_Unix.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,7 @@ int clock_gettime(int clocktype, struct timespec* ts)

void hsThread::SetThisThreadName(const ST::string& name)
{
#ifdef HAVE_PTHREAD_SETNAME_NP
#if defined(HS_BUILD_FOR_APPLE)
// The Apple version doesn't take a thread argument and always operates on the current thread.
int res = pthread_setname_np(name.c_str());
Expand All @@ -86,7 +87,8 @@ void hsThread::SetThisThreadName(const ST::string& name)
// On Linux, thread names must fit into 16 bytes, including the terminator.
int res = pthread_setname_np(pthread_self(), name.left(15).c_str());
hsAssert(res == 0, "Failed to set thread name");
#endif
#endif // HS_BUILD_FOR_LINUX
#endif // HAVE_PTHREAD_SETNAME_NP
// Because this is just a debugging help, do nothing by default (sorry, BSDs).
}

Expand Down
4 changes: 3 additions & 1 deletion cmake/CompilerChecks.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,11 @@ if(NOT DEFINED CMAKE_INTERPROCEDURAL_OPTIMIZATION)
endif()
endif()

# Check for Linux sysinfo.
include(CheckCXXSymbolExists)
# Check for Linux sysinfo.
check_cxx_symbol_exists("sysinfo" "sys/sysinfo.h" HAVE_SYSINFO)
# Check for pthread setname_np API
check_cxx_symbol_exists(pthread_setname_np pthread.h HAVE_PTHREAD_SETNAME_NP)

# Check for BSD style sysctl.
try_compile(HAVE_SYSCTL ${PROJECT_BINARY_DIR}
Expand Down
1 change: 1 addition & 0 deletions cmake/hsConfig.h.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -67,5 +67,6 @@ You can contact Cyan Worlds, Inc. by email [email protected]
#cmakedefine HAVE_SYSDIR
#cmakedefine HAVE_SYSINFO
#cmakedefine HAVE_SHELLSCALINGAPI
#cmakedefine HAVE_PTHREAD_SETNAME_NP

#endif

0 comments on commit 43d05e0

Please sign in to comment.