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();
+#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


Reply via email to