On Thu, Oct 24, 2024 at 2:00 PM Ilya Leoshkevich <i...@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 <i...@linux.ibm.com>
> ---
>  include/qemu/osdep.h |  9 +++++++++
>  util/oslib-posix.c   | 15 +++++++++++++++
>  2 files changed, 24 insertions(+)
>

Reviewed-by: Warner Losh <i...@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
>
>

Reply via email to