[PATCH 5/8] osdep: Introduce qemu_kill_thread()

Ilya Leoshkevich posted 8 patches 4 weeks, 1 day ago
There is a newer version of this series
[PATCH 5/8] osdep: Introduce qemu_kill_thread()
Posted by Ilya Leoshkevich 4 weeks, 1 day ago
Add a function for sending signals to individual threads. It does not make
sense on Windows, so do not provide an implementation, so that if someone
uses it by accident, they will get a linker error.

Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com>
---
 include/qemu/osdep.h |  9 +++++++++
 util/oslib-posix.c   | 15 +++++++++++++++
 2 files changed, 24 insertions(+)

diff --git a/include/qemu/osdep.h b/include/qemu/osdep.h
index fe7c3c5f673..2350477787a 100644
--- a/include/qemu/osdep.h
+++ b/include/qemu/osdep.h
@@ -626,6 +626,15 @@ bool qemu_write_pidfile(const char *pidfile, Error **errp);
 
 int qemu_get_thread_id(void);
 
+/**
+ * qemu_kill_thread:
+ * @tid: thread id.
+ * @sig: host signal.
+ *
+ * Send @sig to one of QEMU's own threads with identifier @tid.
+ */
+int qemu_kill_thread(int tid, int sig);
+
 #ifndef CONFIG_IOVEC
 struct iovec {
     void *iov_base;
diff --git a/util/oslib-posix.c b/util/oslib-posix.c
index 11b35e48fb8..32a41fa8640 100644
--- a/util/oslib-posix.c
+++ b/util/oslib-posix.c
@@ -111,6 +111,21 @@ int qemu_get_thread_id(void)
 #endif
 }
 
+int qemu_kill_thread(int tid, int sig)
+{
+#if defined(__linux__)
+    return syscall(__NR_tgkill, getpid(), tid, sig);
+#elif defined(__FreeBSD__)
+    return thr_kill2(getpid(), tid, sig);
+#elif defined(__NetBSD__)
+    return _lwp_kill(tid, sig);
+#elif defined(__OpenBSD__)
+    return thrkill(tid, sig, NULL);
+#else
+    return kill(tid, sig);
+#endif
+}
+
 int qemu_daemon(int nochdir, int noclose)
 {
     return daemon(nochdir, noclose);
-- 
2.47.0
Re: [PATCH 5/8] osdep: Introduce qemu_kill_thread()
Posted by Warner Losh 2 weeks, 4 days ago
On Thu, Oct 24, 2024 at 2:00 PM Ilya Leoshkevich <iii@linux.ibm.com> wrote:

> Add a function for sending signals to individual threads. It does not make
> sense on Windows, so do not provide an implementation, so that if someone
> uses it by accident, they will get a linker error.
>
> Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com>
> ---
>  include/qemu/osdep.h |  9 +++++++++
>  util/oslib-posix.c   | 15 +++++++++++++++
>  2 files changed, 24 insertions(+)
>

Reviewed-by: Warner Losh <imp@bsidmp.com>


> diff --git a/include/qemu/osdep.h b/include/qemu/osdep.h
> index fe7c3c5f673..2350477787a 100644
> --- a/include/qemu/osdep.h
> +++ b/include/qemu/osdep.h
> @@ -626,6 +626,15 @@ bool qemu_write_pidfile(const char *pidfile, Error
> **errp);
>
>  int qemu_get_thread_id(void);
>
> +/**
> + * qemu_kill_thread:
> + * @tid: thread id.
> + * @sig: host signal.
> + *
> + * Send @sig to one of QEMU's own threads with identifier @tid.
> + */
> +int qemu_kill_thread(int tid, int sig);
> +
>  #ifndef CONFIG_IOVEC
>  struct iovec {
>      void *iov_base;
> diff --git a/util/oslib-posix.c b/util/oslib-posix.c
> index 11b35e48fb8..32a41fa8640 100644
> --- a/util/oslib-posix.c
> +++ b/util/oslib-posix.c
> @@ -111,6 +111,21 @@ int qemu_get_thread_id(void)
>  #endif
>  }
>
> +int qemu_kill_thread(int tid, int sig)
> +{
> +#if defined(__linux__)
> +    return syscall(__NR_tgkill, getpid(), tid, sig);
> +#elif defined(__FreeBSD__)
> +    return thr_kill2(getpid(), tid, sig);
> +#elif defined(__NetBSD__)
> +    return _lwp_kill(tid, sig);
> +#elif defined(__OpenBSD__)
> +    return thrkill(tid, sig, NULL);
> +#else
> +    return kill(tid, sig);
> +#endif
> +}
> +
>  int qemu_daemon(int nochdir, int noclose)
>  {
>      return daemon(nochdir, noclose);
> --
> 2.47.0
>
>
Re: [PATCH 5/8] osdep: Introduce qemu_kill_thread()
Posted by Richard Henderson 2 weeks, 4 days ago
On 10/24/24 20:59, Ilya Leoshkevich wrote:
> Add a function for sending signals to individual threads. It does not make
> sense on Windows, so do not provide an implementation, so that if someone
> uses it by accident, they will get a linker error.
> 
> Signed-off-by: Ilya Leoshkevich<iii@linux.ibm.com>
> ---
>   include/qemu/osdep.h |  9 +++++++++
>   util/oslib-posix.c   | 15 +++++++++++++++
>   2 files changed, 24 insertions(+)

I am annoyed that musl does not have tgkill in <signal.h>.

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>

r~