From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.org/gmane.linux.lib.musl.general/6025 Path: news.gmane.org!not-for-mail From: Jens Gustedt Newsgroups: gmane.linux.lib.musl.general Subject: [PATCH 4/9] add the functions for tss_t and once_flag Date: Mon, 01 Sep 2014 00:46:37 +0200 Message-ID: References: Reply-To: musl@lists.openwall.com NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Transfer-Encoding: 7bit X-Trace: ger.gmane.org 1409525199 19217 80.91.229.3 (31 Aug 2014 22:46:39 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Sun, 31 Aug 2014 22:46:39 +0000 (UTC) To: musl@lists.openwall.com Original-X-From: musl-return-6032-gllmg-musl=m.gmane.org@lists.openwall.com Mon Sep 01 00:46:29 2014 Return-path: Envelope-to: gllmg-musl@plane.gmane.org Original-Received: from mother.openwall.net ([195.42.179.200]) by plane.gmane.org with smtp (Exim 4.69) (envelope-from ) id 1XODtF-0004z7-Cq for gllmg-musl@plane.gmane.org; Mon, 01 Sep 2014 00:46:29 +0200 Original-Received: (qmail 11558 invoked by uid 550); 31 Aug 2014 22:46:28 -0000 Mailing-List: contact musl-help@lists.openwall.com; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: Original-Received: (qmail 11546 invoked from network); 31 Aug 2014 22:46:28 -0000 X-IronPort-AV: E=Sophos;i="5.04,438,1406584800"; d="scan'208";a="92390666" In-Reply-To: Resent-From: Jens Gustedt Resent-To: musl@lists.openwall.com X-Mailer: Evolution 3.4.4-3 Xref: news.gmane.org gmane.linux.lib.musl.general:6025 Archived-At: 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..bb82d04 --- /dev/null +++ b/src/thread/call_once.c @@ -0,0 +1,7 @@ +#include + +int __pthread_once(once_flag *, void (*)(void)); + +void call_once(once_flag *flag, void (*func)(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 + +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 + +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 + +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