mirror of
https://github.com/python/cpython.git
synced 2025-07-07 19:35:27 +00:00
gh-131268: Implement thread names on OpenBSD (#131528)
This commit is contained in:
parent
e0fda794fa
commit
b70d45ab22
5 changed files with 49 additions and 11 deletions
|
@ -2392,8 +2392,16 @@ PyDoc_STRVAR(thread__get_main_thread_ident_doc,
|
|||
Internal only. Return a non-zero integer that uniquely identifies the main thread\n\
|
||||
of the main interpreter.");
|
||||
|
||||
#if defined(__OpenBSD__)
|
||||
/* pthread_*_np functions, especially pthread_{get,set}_name_np().
|
||||
pthread_np.h exists on both OpenBSD and FreeBSD but the latter declares
|
||||
pthread_getname_np() and pthread_setname_np() in pthread.h as long as
|
||||
__BSD_VISIBLE remains set.
|
||||
*/
|
||||
# include <pthread_np.h>
|
||||
#endif
|
||||
|
||||
#if defined(HAVE_PTHREAD_GETNAME_NP) || defined(MS_WINDOWS)
|
||||
#if defined(HAVE_PTHREAD_GETNAME_NP) || defined(HAVE_PTHREAD_GET_NAME_NP) || defined(MS_WINDOWS)
|
||||
/*[clinic input]
|
||||
_thread._get_name
|
||||
|
||||
|
@ -2408,7 +2416,12 @@ _thread__get_name_impl(PyObject *module)
|
|||
// Linux and macOS are limited to respectively 16 and 64 bytes
|
||||
char name[100];
|
||||
pthread_t thread = pthread_self();
|
||||
#ifdef HAVE_PTHREAD_GETNAME_NP
|
||||
int rc = pthread_getname_np(thread, name, Py_ARRAY_LENGTH(name));
|
||||
#else /* defined(HAVE_PTHREAD_GET_NAME_NP) */
|
||||
int rc = 0; /* pthread_get_name_np() returns void */
|
||||
pthread_get_name_np(thread, name, Py_ARRAY_LENGTH(name));
|
||||
#endif
|
||||
if (rc) {
|
||||
errno = rc;
|
||||
return PyErr_SetFromErrno(PyExc_OSError);
|
||||
|
@ -2435,10 +2448,10 @@ _thread__get_name_impl(PyObject *module)
|
|||
return name_obj;
|
||||
#endif
|
||||
}
|
||||
#endif // HAVE_PTHREAD_GETNAME_NP
|
||||
#endif // HAVE_PTHREAD_GETNAME_NP || HAVE_PTHREAD_GET_NAME_NP || MS_WINDOWS
|
||||
|
||||
|
||||
#if defined(HAVE_PTHREAD_SETNAME_NP) || defined(MS_WINDOWS)
|
||||
#if defined(HAVE_PTHREAD_SETNAME_NP) || defined(HAVE_PTHREAD_SET_NAME_NP) || defined(MS_WINDOWS)
|
||||
/*[clinic input]
|
||||
_thread.set_name
|
||||
|
||||
|
@ -2487,9 +2500,13 @@ _thread_set_name_impl(PyObject *module, PyObject *name_obj)
|
|||
#elif defined(__NetBSD__)
|
||||
pthread_t thread = pthread_self();
|
||||
int rc = pthread_setname_np(thread, "%s", (void *)name);
|
||||
#else
|
||||
#elif defined(HAVE_PTHREAD_SETNAME_NP)
|
||||
pthread_t thread = pthread_self();
|
||||
int rc = pthread_setname_np(thread, name);
|
||||
#else /* defined(HAVE_PTHREAD_SET_NAME_NP) */
|
||||
pthread_t thread = pthread_self();
|
||||
int rc = 0; /* pthread_set_name_np() returns void */
|
||||
pthread_set_name_np(thread, name);
|
||||
#endif
|
||||
Py_DECREF(name_encoded);
|
||||
if (rc) {
|
||||
|
@ -2527,7 +2544,7 @@ _thread_set_name_impl(PyObject *module, PyObject *name_obj)
|
|||
Py_RETURN_NONE;
|
||||
#endif
|
||||
}
|
||||
#endif // HAVE_PTHREAD_SETNAME_NP
|
||||
#endif // HAVE_PTHREAD_SETNAME_NP || HAVE_PTHREAD_SET_NAME_NP || MS_WINDOWS
|
||||
|
||||
|
||||
static PyMethodDef thread_methods[] = {
|
||||
|
|
10
Modules/clinic/_threadmodule.c.h
generated
10
Modules/clinic/_threadmodule.c.h
generated
|
@ -8,7 +8,7 @@ preserve
|
|||
#endif
|
||||
#include "pycore_modsupport.h" // _PyArg_UnpackKeywords()
|
||||
|
||||
#if (defined(HAVE_PTHREAD_GETNAME_NP) || defined(MS_WINDOWS))
|
||||
#if (defined(HAVE_PTHREAD_GETNAME_NP) || defined(HAVE_PTHREAD_GET_NAME_NP) || defined(MS_WINDOWS))
|
||||
|
||||
PyDoc_STRVAR(_thread__get_name__doc__,
|
||||
"_get_name($module, /)\n"
|
||||
|
@ -28,9 +28,9 @@ _thread__get_name(PyObject *module, PyObject *Py_UNUSED(ignored))
|
|||
return _thread__get_name_impl(module);
|
||||
}
|
||||
|
||||
#endif /* (defined(HAVE_PTHREAD_GETNAME_NP) || defined(MS_WINDOWS)) */
|
||||
#endif /* (defined(HAVE_PTHREAD_GETNAME_NP) || defined(HAVE_PTHREAD_GET_NAME_NP) || defined(MS_WINDOWS)) */
|
||||
|
||||
#if (defined(HAVE_PTHREAD_SETNAME_NP) || defined(MS_WINDOWS))
|
||||
#if (defined(HAVE_PTHREAD_SETNAME_NP) || defined(HAVE_PTHREAD_SET_NAME_NP) || defined(MS_WINDOWS))
|
||||
|
||||
PyDoc_STRVAR(_thread_set_name__doc__,
|
||||
"set_name($module, /, name)\n"
|
||||
|
@ -92,7 +92,7 @@ exit:
|
|||
return return_value;
|
||||
}
|
||||
|
||||
#endif /* (defined(HAVE_PTHREAD_SETNAME_NP) || defined(MS_WINDOWS)) */
|
||||
#endif /* (defined(HAVE_PTHREAD_SETNAME_NP) || defined(HAVE_PTHREAD_SET_NAME_NP) || defined(MS_WINDOWS)) */
|
||||
|
||||
#ifndef _THREAD__GET_NAME_METHODDEF
|
||||
#define _THREAD__GET_NAME_METHODDEF
|
||||
|
@ -101,4 +101,4 @@ exit:
|
|||
#ifndef _THREAD_SET_NAME_METHODDEF
|
||||
#define _THREAD_SET_NAME_METHODDEF
|
||||
#endif /* !defined(_THREAD_SET_NAME_METHODDEF) */
|
||||
/*[clinic end generated code: output=6e88ef6b126cece8 input=a9049054013a1b77]*/
|
||||
/*[clinic end generated code: output=c7922811558d314f input=a9049054013a1b77]*/
|
||||
|
|
13
configure
generated
vendored
13
configure
generated
vendored
|
@ -19608,12 +19608,24 @@ if test "x$ac_cv_func_pthread_kill" = xyes
|
|||
then :
|
||||
printf "%s\n" "#define HAVE_PTHREAD_KILL 1" >>confdefs.h
|
||||
|
||||
fi
|
||||
ac_fn_c_check_func "$LINENO" "pthread_get_name_np" "ac_cv_func_pthread_get_name_np"
|
||||
if test "x$ac_cv_func_pthread_get_name_np" = xyes
|
||||
then :
|
||||
printf "%s\n" "#define HAVE_PTHREAD_GET_NAME_NP 1" >>confdefs.h
|
||||
|
||||
fi
|
||||
ac_fn_c_check_func "$LINENO" "pthread_getname_np" "ac_cv_func_pthread_getname_np"
|
||||
if test "x$ac_cv_func_pthread_getname_np" = xyes
|
||||
then :
|
||||
printf "%s\n" "#define HAVE_PTHREAD_GETNAME_NP 1" >>confdefs.h
|
||||
|
||||
fi
|
||||
ac_fn_c_check_func "$LINENO" "pthread_set_name_np" "ac_cv_func_pthread_set_name_np"
|
||||
if test "x$ac_cv_func_pthread_set_name_np" = xyes
|
||||
then :
|
||||
printf "%s\n" "#define HAVE_PTHREAD_SET_NAME_NP 1" >>confdefs.h
|
||||
|
||||
fi
|
||||
ac_fn_c_check_func "$LINENO" "pthread_setname_np" "ac_cv_func_pthread_setname_np"
|
||||
if test "x$ac_cv_func_pthread_setname_np" = xyes
|
||||
|
@ -30455,6 +30467,7 @@ case "$ac_sys_system" in
|
|||
Darwin) _PYTHREAD_NAME_MAXLEN=63;;
|
||||
iOS) _PYTHREAD_NAME_MAXLEN=63;;
|
||||
FreeBSD*) _PYTHREAD_NAME_MAXLEN=19;; # gh-131268
|
||||
OpenBSD*) _PYTHREAD_NAME_MAXLEN=23;; # gh-131268
|
||||
*) _PYTHREAD_NAME_MAXLEN=;;
|
||||
esac
|
||||
if test -n "$_PYTHREAD_NAME_MAXLEN"; then
|
||||
|
|
|
@ -5147,7 +5147,8 @@ AC_CHECK_FUNCS([ \
|
|||
posix_spawn_file_actions_addclosefrom_np \
|
||||
pread preadv preadv2 process_vm_readv \
|
||||
pthread_cond_timedwait_relative_np pthread_condattr_setclock pthread_init \
|
||||
pthread_kill pthread_getname_np pthread_setname_np pthread_getattr_np \
|
||||
pthread_kill pthread_get_name_np pthread_getname_np pthread_set_name_np
|
||||
pthread_setname_np pthread_getattr_np \
|
||||
ptsname ptsname_r pwrite pwritev pwritev2 readlink readlinkat readv realpath renameat \
|
||||
rtpSpawn sched_get_priority_max sched_rr_get_interval sched_setaffinity \
|
||||
sched_setparam sched_setscheduler sem_clockwait sem_getvalue sem_open \
|
||||
|
@ -7563,6 +7564,7 @@ case "$ac_sys_system" in
|
|||
Darwin) _PYTHREAD_NAME_MAXLEN=63;;
|
||||
iOS) _PYTHREAD_NAME_MAXLEN=63;;
|
||||
FreeBSD*) _PYTHREAD_NAME_MAXLEN=19;; # gh-131268
|
||||
OpenBSD*) _PYTHREAD_NAME_MAXLEN=23;; # gh-131268
|
||||
*) _PYTHREAD_NAME_MAXLEN=;;
|
||||
esac
|
||||
if test -n "$_PYTHREAD_NAME_MAXLEN"; then
|
||||
|
|
|
@ -993,6 +993,9 @@
|
|||
/* Define to 1 if you have the 'pthread_getname_np' function. */
|
||||
#undef HAVE_PTHREAD_GETNAME_NP
|
||||
|
||||
/* Define to 1 if you have the 'pthread_get_name_np' function. */
|
||||
#undef HAVE_PTHREAD_GET_NAME_NP
|
||||
|
||||
/* Define to 1 if you have the <pthread.h> header file. */
|
||||
#undef HAVE_PTHREAD_H
|
||||
|
||||
|
@ -1005,6 +1008,9 @@
|
|||
/* Define to 1 if you have the 'pthread_setname_np' function. */
|
||||
#undef HAVE_PTHREAD_SETNAME_NP
|
||||
|
||||
/* Define to 1 if you have the 'pthread_set_name_np' function. */
|
||||
#undef HAVE_PTHREAD_SET_NAME_NP
|
||||
|
||||
/* Define to 1 if you have the 'pthread_sigmask' function. */
|
||||
#undef HAVE_PTHREAD_SIGMASK
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue