* Daniel P. Berrangé (berra...@redhat.com) wrote:
> For logging it is useful to include the current thread id. On
> POSIX there is no standard API for this, so try the Linux gettid()
> syscall preferentially, otherwise fallback to casting the result
> of thread_self() to an integer.
> 
> Signed-off-by: Daniel P. Berrangé <berra...@redhat.com>
> ---
>  include/qemu/thread.h    |  1 +
>  util/qemu-thread-posix.c | 11 +++++++++++
>  util/qemu-thread-win32.c |  5 +++++
>  3 files changed, 17 insertions(+)
> 
> diff --git a/include/qemu/thread.h b/include/qemu/thread.h
> index 3a286bb3ef..96eee82679 100644
> --- a/include/qemu/thread.h
> +++ b/include/qemu/thread.h
> @@ -215,6 +215,7 @@ void *qemu_thread_join(QemuThread *thread);
>  void qemu_thread_get_self(QemuThread *thread);
>  bool qemu_thread_is_self(QemuThread *thread);
>  G_NORETURN void qemu_thread_exit(void *retval);
> +uint64_t qemu_thread_get_id(void);
>  
>  struct Notifier;
>  /**
> diff --git a/util/qemu-thread-posix.c b/util/qemu-thread-posix.c
> index 121d7ed69b..f240a93632 100644
> --- a/util/qemu-thread-posix.c
> +++ b/util/qemu-thread-posix.c
> @@ -532,3 +532,14 @@ void *qemu_thread_join(QemuThread *thread)
>      }
>      return ret;
>  }
> +
> +uint64_t qemu_thread_get_id(void)
> +{
> +#ifdef CONFIG_GETTID
> +    return (uint64_t)gettid();
> +#elif defined(SYS_gettid)
> +    return (uint64_t)syscall(SYS_gettid);
> +#else
> +    return (uint64_t)pthread_self();

My reading of the manpage is that is not guaranteed to be castable.
It also explicitly says it's not the same as gettid.  Albeit probably is.

Dave

> +#endif
> +}
> diff --git a/util/qemu-thread-win32.c b/util/qemu-thread-win32.c
> index 5e6ca0c12f..f6956717b2 100644
> --- a/util/qemu-thread-win32.c
> +++ b/util/qemu-thread-win32.c
> @@ -412,3 +412,8 @@ bool qemu_thread_is_self(QemuThread *thread)
>  {
>      return GetCurrentThreadId() == thread->tid;
>  }
> +
> +uint64_t qemu_thread_get_id(void)
> +{
> +    return (uint64_t)GetCurrentThreadId();
> +}
> -- 
> 2.50.1
> 
-- 
 -----Open up your eyes, open up your mind, open up your code -------   
/ Dr. David Alan Gilbert    |       Running GNU/Linux       | Happy  \ 
\        dave @ treblig.org |                               | In Hex /
 \ _________________________|_____ http://www.treblig.org   |_______/

Reply via email to