configure time fix for thread naming on old glibc
cover configure time fix for thread naming on old glibc
From: "Dr. David Alan Gilbert" <[email protected]>
Peter was preferring configure time detection of pthread_setname_np to guard against my recent breaking of builds on old libc.
I've tested this on:
Fedora 20 - modern glibc - works as before
RHEL 5 - glibc 2.5:
[dgilbert@davidgil-rhel5 try]$ ./bin/qemu-system-x86_64 -nographic -name debug-threads=on
qemu: thread naming not supported on this host
and checked a mingw windows cross build builds.
A check on SLES11 is probably worth a try if someone has one to hand.
Dr. David Alan Gilbert (1):
Detect pthread_setname_np at configure time
configure | 28 ++++++++++++++++++++++++++++ util/qemu-thread-posix.c | 21 ++++++++++++++++++--- util/qemu-thread-win32.c | 2 ++ 3 files changed, 48 insertions(+), 3 deletions(-)
Signature · 1 line
1.8.5.3
PATCH 1/1 Detect pthread_setname_np at configure time
From: "Dr. David Alan Gilbert" <[email protected]>
Warn if no way of setting thread name is available.
--- configure | 28 ++++++++++++++++++++++++++++ util/qemu-thread-posix.c | 21 ++++++++++++++++++--- util/qemu-thread-win32.c | 2 ++ 3 files changed, 48 insertions(+), 3 deletions(-)
configure +28 -0
@@ -2709,6 +2709,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
@@ -4636,6 +4654,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
util/qemu-thread-posix.c +18 -3
@@ -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 );
util/qemu-thread-win32.c +2 -0
@@ -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)
Signature · 1 line
1.8.5.3
[Qemu-devel] Ping: [PATCH 0/1] configure time fix for thread naming on old glibc
In reply to Dr. David Alan Gilbert (git)Quoted 15 lines · * Dr. David Alan Gilbert (git) ([email protected]) wrote:
From: "Dr. David Alan Gilbert" <[email protected]>
Peter was preferring configure time detection of
pthread_setname_npto guard against my recent breaking of builds on old libc.I've tested this on:
Fedora 20 - modern glibc - works as before
RHEL 5 - glibc 2.5:
[dgilbert@davidgil-rhel5 try]$ ./bin/qemu-system-x86_64 -nographic -name debug-threads=on
qemu: thread naming not supported on this hostand checked a mingw windows cross build builds.
A check on SLES11 is probably worth a try if someone has one to hand.
Quoted 12 lines
Dr. David Alan Gilbert (1):
Detectpthread_setname_npat configure timeconfigure | 28 ++++++++++++++++++++++++++++ util/qemu-thread-posix.c | 21 ++++++++++++++++++--- util/qemu-thread-win32.c | 2 ++ 3 files changed, 48 insertions(+), 3 deletions(-)Signature · 1 line
1.8.5.3
--
Dr. David Alan Gilbert / [email protected] / Manchester, UK
Michael S. Tsirkin
AppliedQuoted 11 lines · Dr. David Alan Gilbert (git)
From: "Dr. David Alan Gilbert" <[email protected]>
Peter was preferring configure time detection of
pthread_setname_npto guard against my recent breaking of builds on old libc.I've tested this on:
Fedora 20 - modern glibc - works as before
RHEL 5 - glibc 2.5:
[dgilbert@davidgil-rhel5 try]$ ./bin/qemu-system-x86_64 -nographic -name debug-threads=on
qemu: thread naming not supported on this host
Quoted 3 lines
and checked a mingw windows cross build builds.
A check on SLES11 is probably worth a try if someone has one to hand.
I've applied this for 2.0, thanks!
Quoted 10 lines
Dr. David Alan Gilbert (1):
Detectpthread_setname_npat configure timeconfigure | 28 ++++++++++++++++++++++++++++ util/qemu-thread-posix.c | 21 ++++++++++++++++++--- util/qemu-thread-win32.c | 2 ++ 3 files changed, 48 insertions(+), 3 deletions(-)Signature · 1 line
1.8.5.3