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
>
>