From d645bec45a695d4bcad9263c30977af43db44b19 Mon Sep 17 00:00:00 2001 From: des Date: Sun, 3 Feb 2008 22:35:45 +0000 Subject: Add a regression test for pthread_mutex_islocked_np(). MFC after: 2 weeks --- .../regression/pthread/mutex_islocked_np/Makefile | 8 +++ .../pthread/mutex_islocked_np/mutex_islocked_np.c | 77 ++++++++++++++++++++++ 2 files changed, 85 insertions(+) create mode 100644 tools/regression/pthread/mutex_islocked_np/Makefile create mode 100644 tools/regression/pthread/mutex_islocked_np/mutex_islocked_np.c diff --git a/tools/regression/pthread/mutex_islocked_np/Makefile b/tools/regression/pthread/mutex_islocked_np/Makefile new file mode 100644 index 0000000..90e381d --- /dev/null +++ b/tools/regression/pthread/mutex_islocked_np/Makefile @@ -0,0 +1,8 @@ +# $FreeBSD$ + +PROG= mutex_islocked_np +NO_MAN= + +LDADD= -lpthread + +.include diff --git a/tools/regression/pthread/mutex_islocked_np/mutex_islocked_np.c b/tools/regression/pthread/mutex_islocked_np/mutex_islocked_np.c new file mode 100644 index 0000000..3e467a1 --- /dev/null +++ b/tools/regression/pthread/mutex_islocked_np/mutex_islocked_np.c @@ -0,0 +1,77 @@ +/*- + * Copyright (c) 2008 Dag-Erling Coïdan Smørgrav + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer + * in this position and unchanged. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#include +#include +#include +#include + +static void * +thread(void *arg) +{ + pthread_mutex_t *mtx = arg; + + if (pthread_mutex_islocked_np(mtx) == 0) { + printf("pthread_mutex_islocked_np() returned zero\n" + "for a mutex held by another thread\n"); + exit(1); + } + return (NULL); +} + +int +main(int argc, char *argv[]) +{ + pthread_t thr; + pthread_mutex_t mtx; + + pthread_mutex_init(&mtx, NULL); + if (pthread_mutex_islocked_np(&mtx) != 0) { + printf("pthread_mutex_islocked_np() returned non-zero\n" + "for a mutex that is not held\n"); + exit(1); + } + pthread_mutex_lock(&mtx); + if (pthread_mutex_islocked_np(&mtx) == 0) { + printf("pthread_mutex_islocked_np() returned zero\n" + "for a mutex we hold ourselves\n"); + exit(1); + } + pthread_create(&thr, NULL, thread, &mtx); + pthread_join(thr, NULL); + pthread_mutex_unlock(&mtx); + if (pthread_mutex_islocked_np(&mtx) != 0) { + printf("pthread_mutex_islocked_np() returned non-zero\n" + "for a mutex that is not held\n"); + exit(1); + } + + printf("OK\n"); + exit(0); +} -- cgit v1.1