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