Detect pthread_setname_np at configure time
Warn if no way of setting thread name is available. Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
f7bc8ef809
commit
5c31207941
28
configure
vendored
28
configure
vendored
@ -2696,6 +2696,24 @@ if test "$mingw32" != yes -a "$pthread" = no; then
|
||||
"Make sure to have the pthread libs and headers installed."
|
||||
fi
|
||||
|
||||
# check for pthread_setname_np
|
||||
pthread_setname_np=no
|
||||
cat > $TMPC << EOF
|
||||
#include <pthread.h>
|
||||
|
||||
static void *f(void *p) { return NULL; }
|
||||
int main(void)
|
||||
{
|
||||
pthread_t thread;
|
||||
pthread_create(&thread, 0, f, 0);
|
||||
pthread_setname_np(thread, "QEMU");
|
||||
return 0;
|
||||
}
|
||||
EOF
|
||||
if compile_prog "" "$pthread_lib" ; then
|
||||
pthread_setname_np=yes
|
||||
fi
|
||||
|
||||
##########################################
|
||||
# rbd probe
|
||||
if test "$rbd" != "no" ; then
|
||||
@ -4628,6 +4646,16 @@ if test "$rdma" = "yes" ; then
|
||||
echo "CONFIG_RDMA=y" >> $config_host_mak
|
||||
fi
|
||||
|
||||
# Hold two types of flag:
|
||||
# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
|
||||
# a thread we have a handle to
|
||||
# CONFIG_PTHREAD_SETNAME_NP - A way of doing it on a particular
|
||||
# platform
|
||||
if test "$pthread_setname_np" = "yes" ; then
|
||||
echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
|
||||
echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak
|
||||
fi
|
||||
|
||||
if test "$tcg_interpreter" = "yes"; then
|
||||
QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
|
||||
elif test "$ARCH" = "sparc64" ; then
|
||||
|
@ -32,6 +32,13 @@ static bool name_threads;
|
||||
void qemu_thread_naming(bool enable)
|
||||
{
|
||||
name_threads = enable;
|
||||
|
||||
#ifndef CONFIG_THREAD_SETNAME_BYTHREAD
|
||||
/* This is a debugging option, not fatal */
|
||||
if (enable) {
|
||||
fprintf(stderr, "qemu: thread naming not supported on this host\n");
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
static void error_exit(int err, const char *msg)
|
||||
@ -394,6 +401,16 @@ void qemu_event_wait(QemuEvent *ev)
|
||||
}
|
||||
}
|
||||
|
||||
/* Attempt to set the threads name; note that this is for debug, so
|
||||
* we're not going to fail if we can't set it.
|
||||
*/
|
||||
static void qemu_thread_set_name(QemuThread *thread, const char *name)
|
||||
{
|
||||
#ifdef CONFIG_PTHREAD_SETNAME_NP
|
||||
pthread_setname_np(thread->thread, name);
|
||||
#endif
|
||||
}
|
||||
|
||||
void qemu_thread_create(QemuThread *thread, const char *name,
|
||||
void *(*start_routine)(void*),
|
||||
void *arg, int mode)
|
||||
@ -420,11 +437,9 @@ void qemu_thread_create(QemuThread *thread, const char *name,
|
||||
if (err)
|
||||
error_exit(err, __func__);
|
||||
|
||||
#if defined(__GLIBC__) && (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 12))
|
||||
if (name_threads) {
|
||||
pthread_setname_np(thread->thread, name);
|
||||
qemu_thread_set_name(thread, name);
|
||||
}
|
||||
#endif
|
||||
|
||||
pthread_sigmask(SIG_SETMASK, &oldset, NULL);
|
||||
|
||||
|
@ -22,6 +22,8 @@ void qemu_thread_naming(bool enable)
|
||||
{
|
||||
/* But note we don't actually name them on Windows yet */
|
||||
name_threads = enable;
|
||||
|
||||
fprintf(stderr, "qemu: thread naming not supported on this host\n");
|
||||
}
|
||||
|
||||
static void error_exit(int err, const char *msg)
|
||||
|
Loading…
Reference in New Issue
Block a user