From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.org/gmane.linux.lib.musl.general/5989 Path: news.gmane.org!not-for-mail From: Jens Gustedt Newsgroups: gmane.linux.lib.musl.general Subject: [PATCH 6/8] add the functions for cnd_t Date: Sat, 30 Aug 2014 20:47:22 +0200 Message-ID: <64bad51d35eea337b8d998a1a2165c5adc440e1d.1409423162.git.Jens.Gustedt@inria.fr> 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 1409424439 6085 80.91.229.3 (30 Aug 2014 18:47:19 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Sat, 30 Aug 2014 18:47:19 +0000 (UTC) To: musl@lists.openwall.com Original-X-From: musl-return-5997-gllmg-musl=m.gmane.org@lists.openwall.com Sat Aug 30 20:47:18 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 1XNngD-0000fK-Cx for gllmg-musl@plane.gmane.org; Sat, 30 Aug 2014 20:47:17 +0200 Original-Received: (qmail 5594 invoked by uid 550); 30 Aug 2014 18:47:15 -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 5493 invoked from network); 30 Aug 2014 18:47:15 -0000 X-IronPort-AV: E=Sophos;i="5.04,432,1406584800"; d="scan'208";a="92267852" 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:5989 Archived-At: Because of the clear separation for private pthread_cond_t these interfaces are quite simple and direct. --- src/thread/cnd_broadcast.c | 9 +++++++++ src/thread/cnd_destroy.c | 5 +++++ src/thread/cnd_init.c | 9 +++++++++ src/thread/cnd_signal.c | 9 +++++++++ src/thread/cnd_timedwait.c | 14 ++++++++++++++ src/thread/cnd_wait.c | 10 ++++++++++ 6 files changed, 56 insertions(+) create mode 100644 src/thread/cnd_broadcast.c create mode 100644 src/thread/cnd_destroy.c create mode 100644 src/thread/cnd_init.c create mode 100644 src/thread/cnd_signal.c create mode 100644 src/thread/cnd_timedwait.c create mode 100644 src/thread/cnd_wait.c diff --git a/src/thread/cnd_broadcast.c b/src/thread/cnd_broadcast.c new file mode 100644 index 0000000..cf52f6d --- /dev/null +++ b/src/thread/cnd_broadcast.c @@ -0,0 +1,9 @@ +#include + +int __private_cond_signal(cnd_t *, int); + +int cnd_broadcast(cnd_t * cnd) { + /* This internal function never fails. */ + (void)__private_cond_signal(cnd, -1); + return thrd_success; +} diff --git a/src/thread/cnd_destroy.c b/src/thread/cnd_destroy.c new file mode 100644 index 0000000..7c24d1a --- /dev/null +++ b/src/thread/cnd_destroy.c @@ -0,0 +1,5 @@ +#include + +void (cnd_destroy)(cnd_t *cnd) { + /* For private cv this is a no-op */ +} diff --git a/src/thread/cnd_init.c b/src/thread/cnd_init.c new file mode 100644 index 0000000..c8aaee5 --- /dev/null +++ b/src/thread/cnd_init.c @@ -0,0 +1,9 @@ +#include + +int cnd_init(cnd_t * c) +{ + *c = (cnd_t) { + 0 + }; + return thrd_success; +} diff --git a/src/thread/cnd_signal.c b/src/thread/cnd_signal.c new file mode 100644 index 0000000..143883c --- /dev/null +++ b/src/thread/cnd_signal.c @@ -0,0 +1,9 @@ +#include + +int __private_cond_signal(cnd_t *, int); + +int cnd_signal(cnd_t * cnd) { + /* This internal function never fails. */ + (void)__private_cond_signal(cnd, 1); + return thrd_success; +} diff --git a/src/thread/cnd_timedwait.c b/src/thread/cnd_timedwait.c new file mode 100644 index 0000000..d69a4f1 --- /dev/null +++ b/src/thread/cnd_timedwait.c @@ -0,0 +1,14 @@ +#include +#include + +int __pthread_cond_timedwait(cnd_t *restrict c, mtx_t *restrict m, const struct timespec *restrict ts); + +int cnd_timedwait(cnd_t *restrict cond, mtx_t *restrict mutex, const struct timespec *restrict ts) { + int ret = __pthread_cond_timedwait(cond, mutex, ts); + switch (ret) { + /* May also return EINVAL or EPERM. */ + default: return thrd_error; + case 0: return thrd_success; + case ETIMEDOUT: return thrd_timedout; + } +} diff --git a/src/thread/cnd_wait.c b/src/thread/cnd_wait.c new file mode 100644 index 0000000..91e89db --- /dev/null +++ b/src/thread/cnd_wait.c @@ -0,0 +1,10 @@ +#include + +int cnd_wait(cnd_t *cond, mtx_t *mutex) +{ + /* Calling cnd_timedwait with a null pointer is an + extension. Such a call is convenient, here since it avoids to + repeat the case analysis that is already done for + cnd_timedwait. */ + return cnd_timedwait(cond, mutex, 0); +} -- 1.7.10.4