|
Message-Id: <09db1c648c8e0084b26a3c73c1d59ffa43bec843.1409423162.git.Jens.Gustedt@inria.fr> Date: Sat, 30 Aug 2014 20:47:03 +0200 From: Jens Gustedt <Jens.Gustedt@...ia.fr> To: musl@...ts.openwall.com Subject: [PATCH 4/8] add the functions for tss_t and once_flag These all have POSIX equivalents but with some changes to the interfaces. --- src/thread/call_once.c | 7 +++++++ src/thread/tss_create.c | 11 +++++++++++ src/thread/tss_delete.c | 7 +++++++ src/thread/tss_set.c | 13 +++++++++++++ 4 files changed, 38 insertions(+) create mode 100644 src/thread/call_once.c create mode 100644 src/thread/tss_create.c create mode 100644 src/thread/tss_delete.c create mode 100644 src/thread/tss_set.c diff --git a/src/thread/call_once.c b/src/thread/call_once.c new file mode 100644 index 0000000..26c735c --- /dev/null +++ b/src/thread/call_once.c @@ -0,0 +1,7 @@ +#include <threads.h> + +int __pthread_once(once_flag *, void (*)(void)); + +void (call_once)(once_flag *flag, void (*func)(void)) { + (void)__pthread_once(flag, func); +} diff --git a/src/thread/tss_create.c b/src/thread/tss_create.c new file mode 100644 index 0000000..af8772a --- /dev/null +++ b/src/thread/tss_create.c @@ -0,0 +1,11 @@ +#include <threads.h> + +int __pthread_key_create(tss_t *k, void (*dtor)(void *)); + +int tss_create(tss_t *tss, tss_dtor_t dtor) +{ + /* Different error returns are possible. C glues them together into + just failure notification. Can't be optimized to a tail call, + unless thrd_error equals EAGAIN. */ + return __pthread_key_create(tss, dtor) ? thrd_error : thrd_success; +} diff --git a/src/thread/tss_delete.c b/src/thread/tss_delete.c new file mode 100644 index 0000000..7d7aacb --- /dev/null +++ b/src/thread/tss_delete.c @@ -0,0 +1,7 @@ +#include <threads.h> + +int __pthread_key_delete(tss_t k); + +void (tss_delete)(tss_t key) { + (void)__pthread_key_delete(key); +} diff --git a/src/thread/tss_set.c b/src/thread/tss_set.c new file mode 100644 index 0000000..70c4fb7 --- /dev/null +++ b/src/thread/tss_set.c @@ -0,0 +1,13 @@ +#include "pthread_impl.h" +#include <threads.h> + +int tss_set(tss_t k, void *x) +{ + struct pthread *self = __pthread_self(); + /* Avoid unnecessary COW */ + if (self->tsd[k] != x) { + self->tsd[k] = x; + self->tsd_used = 1; + } + return thrd_success; +} -- 1.7.10.4
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.