gh-81925: Implement native thread ids for kFreeBSD (#111761)

---------

Co-authored-by: Antoine Pitrou <antoine@python.org>
This commit is contained in:
Samuel Thibault 2023-11-09 21:02:30 +01:00 committed by GitHub
parent 0c61d028be
commit 0802fd6c8e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 18 additions and 5 deletions

View file

@ -120,10 +120,13 @@ This module defines the following constants and functions:
Its value may be used to uniquely identify this particular thread system-wide Its value may be used to uniquely identify this particular thread system-wide
(until the thread terminates, after which the value may be recycled by the OS). (until the thread terminates, after which the value may be recycled by the OS).
.. availability:: Windows, FreeBSD, Linux, macOS, OpenBSD, NetBSD, AIX, DragonFlyBSD. .. availability:: Windows, FreeBSD, Linux, macOS, OpenBSD, NetBSD, AIX, DragonFlyBSD, GNU/kFreeBSD.
.. versionadded:: 3.8 .. versionadded:: 3.8
.. versionchanged:: 3.13
Added support for GNU/kFreeBSD.
.. function:: stack_size([size]) .. function:: stack_size([size])

View file

@ -127,10 +127,13 @@ This module defines the following functions:
Its value may be used to uniquely identify this particular thread system-wide Its value may be used to uniquely identify this particular thread system-wide
(until the thread terminates, after which the value may be recycled by the OS). (until the thread terminates, after which the value may be recycled by the OS).
.. availability:: Windows, FreeBSD, Linux, macOS, OpenBSD, NetBSD, AIX, DragonFlyBSD. .. availability:: Windows, FreeBSD, Linux, macOS, OpenBSD, NetBSD, AIX, DragonFlyBSD, GNU/kFreeBSD.
.. versionadded:: 3.8 .. versionadded:: 3.8
.. versionchanged:: 3.13
Added support for GNU/kFreeBSD.
.. function:: enumerate() .. function:: enumerate()

View file

@ -127,8 +127,8 @@ class Availability(SphinxDirective):
# known platform, libc, and threading implementations # known platform, libc, and threading implementations
known_platforms = frozenset({ known_platforms = frozenset({
"AIX", "Android", "BSD", "DragonFlyBSD", "Emscripten", "FreeBSD", "AIX", "Android", "BSD", "DragonFlyBSD", "Emscripten", "FreeBSD",
"Linux", "NetBSD", "OpenBSD", "POSIX", "Solaris", "Unix", "VxWorks", "GNU/kFreeBSD", "Linux", "NetBSD", "OpenBSD", "POSIX", "Solaris",
"WASI", "Windows", "macOS", "Unix", "VxWorks", "WASI", "Windows", "macOS",
# libc # libc
"BSD libc", "glibc", "musl", "BSD libc", "glibc", "musl",
# POSIX platforms with pthreads # POSIX platforms with pthreads

View file

@ -21,7 +21,8 @@ PyAPI_FUNC(void) _Py_NO_RETURN PyThread_exit_thread(void);
PyAPI_FUNC(unsigned long) PyThread_get_thread_ident(void); PyAPI_FUNC(unsigned long) PyThread_get_thread_ident(void);
#if (defined(__APPLE__) || defined(__linux__) || defined(_WIN32) \ #if (defined(__APPLE__) || defined(__linux__) || defined(_WIN32) \
|| defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) \ || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) \
|| defined(__OpenBSD__) || defined(__NetBSD__) \
|| defined(__DragonFly__) || defined(_AIX)) || defined(__DragonFly__) || defined(_AIX))
#define PY_HAVE_THREAD_NATIVE_ID #define PY_HAVE_THREAD_NATIVE_ID
PyAPI_FUNC(unsigned long) PyThread_get_thread_native_id(void); PyAPI_FUNC(unsigned long) PyThread_get_thread_native_id(void);

View file

@ -0,0 +1 @@
Implement native thread ids for GNU KFreeBSD.

View file

@ -20,6 +20,8 @@
# include <sys/syscall.h> /* syscall(SYS_gettid) */ # include <sys/syscall.h> /* syscall(SYS_gettid) */
#elif defined(__FreeBSD__) #elif defined(__FreeBSD__)
# include <pthread_np.h> /* pthread_getthreadid_np() */ # include <pthread_np.h> /* pthread_getthreadid_np() */
#elif defined(__FreeBSD_kernel__)
# include <sys/syscall.h> /* syscall(SYS_thr_self) */
#elif defined(__OpenBSD__) #elif defined(__OpenBSD__)
# include <unistd.h> /* getthrid() */ # include <unistd.h> /* getthrid() */
#elif defined(_AIX) #elif defined(_AIX)
@ -384,6 +386,9 @@ PyThread_get_thread_native_id(void)
#elif defined(__FreeBSD__) #elif defined(__FreeBSD__)
int native_id; int native_id;
native_id = pthread_getthreadid_np(); native_id = pthread_getthreadid_np();
#elif defined(__FreeBSD_kernel__)
long native_id;
syscall(SYS_thr_self, &native_id);
#elif defined(__OpenBSD__) #elif defined(__OpenBSD__)
pid_t native_id; pid_t native_id;
native_id = getthrid(); native_id = getthrid();