|
Message-ID: <20190802202516.GI9017@brightrain.aerifal.cx> Date: Fri, 2 Aug 2019 16:25:16 -0400 From: Rich Felker <dalias@...c.org> To: musl@...ts.openwall.com Subject: Re: [PATCH] Add gettid and tgkill syscall wrappers. On Thu, Aug 01, 2019 at 04:31:11PM -0400, James Y Knight wrote: > > From bdb4f28edece4b81e99becf4ffcdc69449211764 Mon Sep 17 00:00:00 2001 > From: James Y Knight <jyknight@...gle.com> > Date: Thu, 1 Aug 2019 12:43:08 -0400 > Subject: [PATCH] Add gettid and tgkill syscall wrappers. > > --- > include/signal.h | 1 + > include/unistd.h | 1 + > src/linux/gettid.c | 8 ++++++++ > src/linux/tgkill.c | 8 ++++++++ > 4 files changed, 18 insertions(+) > create mode 100644 src/linux/gettid.c > create mode 100644 src/linux/tgkill.c > > diff --git a/include/signal.h b/include/signal.h > index 5c48cb83..6843323a 100644 > --- a/include/signal.h > +++ b/include/signal.h > @@ -257,6 +257,7 @@ void (*bsd_signal(int, void (*)(int)))(int); > int sigisemptyset(const sigset_t *); > int sigorset (sigset_t *, const sigset_t *, const sigset_t *); > int sigandset(sigset_t *, const sigset_t *, const sigset_t *); > +int tgkill(pid_t, pid_t, int); > > #define SA_NOMASK SA_NODEFER > #define SA_ONESHOT SA_RESETHAND > diff --git a/include/unistd.h b/include/unistd.h > index 9485da7a..4764f157 100644 > --- a/include/unistd.h > +++ b/include/unistd.h > @@ -188,6 +188,7 @@ char *get_current_dir_name(void); > int syncfs(int); > int euidaccess(const char *, int); > int eaccess(const char *, int); > +pid_t gettid(void); > #endif > > #if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE) > diff --git a/src/linux/gettid.c b/src/linux/gettid.c > new file mode 100644 > index 00000000..6490101d > --- /dev/null > +++ b/src/linux/gettid.c > @@ -0,0 +1,8 @@ > +#define _GNU_SOURCE > +#include <unistd.h> > +#include "syscall.h" > + > +pid_t gettid(void) > +{ > + return __syscall(SYS_gettid); > +} > diff --git a/src/linux/tgkill.c b/src/linux/tgkill.c > new file mode 100644 > index 00000000..97365d58 > --- /dev/null > +++ b/src/linux/tgkill.c > @@ -0,0 +1,8 @@ > +#define _GNU_SOURCE > +#include <signal.h> > +#include "syscall.h" > + > +int tgkill(pid_t pid, pid_t tid, int sig) > +{ > + return syscall(SYS_tgkill, pid, tid, sig); > +} > -- > 2.22.0.770.g0f2c4a37fd-goog Is pid_t the right type for this? Fundamentally the futex interface imposes a requirement that tids fit in 29 bits of int. pid_t *is* int anyway, but it's more a matter of figuring out what the right semantic type for this is. I also question whether tgkill should be a supported API. The idea of being able to address threads of other processes is dubious. Before we start adding these, I think we should think about which ones make sense as APIs that applications can safely use. Also, pthread_gettid_np or something like that is probably important to being able to use any interfaces involving tids; otherwise you can only address yourself without explicit communication with a thread to query its tid. Is there a list of which interfaces glibc will be adding and their rationale? Rich
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.