From patchwork Wed Jul 30 00:31:53 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gratian Crisan X-Patchwork-Id: 2226 Received: (qmail 16674 invoked by alias); 30 Jul 2014 00:33:01 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 16593 invoked by uid 89); 30 Jul 2014 00:33:00 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.6 required=5.0 tests=AWL, BAYES_00, SPF_HELO_PASS, SPF_PASS autolearn=ham version=3.3.2 X-HELO: ni.com From: gratian.crisan@ni.com To: libc-alpha@sourceware.org Cc: Darren Hart , "Carlos O'Donell" , Joseph Myers , Jeff Law , Scot Salmon , Siddhesh Poyarekar , Thomas Gleixner , Torvald Riegel , Clark Williams , "Paul E. McKenney" , Will Newton , gratian@gmail.com Subject: [PATCH 2/6][BZ #11588] pi-condvars: add tst-condpi1.c, basic API test Date: Tue, 29 Jul 2014 19:31:53 -0500 Message-Id: <1406680317-20189-3-git-send-email-gratian.crisan@ni.com> In-Reply-To: <1406680317-20189-1-git-send-email-gratian.crisan@ni.com> References: <1406680317-20189-1-git-send-email-gratian.crisan@ni.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:5.12.52, 1.0.14, 0.0.0000 definitions=2014-07-29_06:2014-07-29, 2014-07-29, 1970-01-01 signatures=0 From: Gratian Crisan A simple test that just confirms the new pthread_condattr_setprotocol_np() API returns correctly. No priority inversion avoidance testing is done here. Signed-off-by: Darren Hart Signed-off-by: Gratian Crisan --- ChangeLog: 2014-07-29 Gratian Crisan Darren Hart [BZ #11588] * nptl/tst-condpi1.c: New file. * nptl/Makefile: Add tst-condpi1. --- nptl/Makefile | 1 + nptl/tst-condpi1.c | 121 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 122 insertions(+) create mode 100644 nptl/tst-condpi1.c diff --git a/nptl/Makefile b/nptl/Makefile index ba6c6ab..1bc4e0c 100644 --- a/nptl/Makefile +++ b/nptl/Makefile @@ -219,6 +219,7 @@ tests = tst-typesizes \ tst-cond14 tst-cond15 tst-cond16 tst-cond17 tst-cond18 tst-cond19 \ tst-cond20 tst-cond21 tst-cond22 tst-cond23 tst-cond24 tst-cond25 \ tst-cond-except \ + tst-condpi1 \ tst-robust1 tst-robust2 tst-robust3 tst-robust4 tst-robust5 \ tst-robust6 tst-robust7 tst-robust8 tst-robust9 \ tst-robustpi1 tst-robustpi2 tst-robustpi3 tst-robustpi4 tst-robustpi5 \ diff --git a/nptl/tst-condpi1.c b/nptl/tst-condpi1.c new file mode 100644 index 0000000..078c80f --- /dev/null +++ b/nptl/tst-condpi1.c @@ -0,0 +1,121 @@ +/* Copyright (C) 2002, 2010, 2013 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Darren Hart + Based on test-cond1.c by Ulrich Drepper + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#include +#include +#include +#include + + +static pthread_cond_t cond; +static pthread_mutex_t mut; + + +static void * +tf (void *p) +{ + int err; + + err = pthread_mutex_lock (&mut); + if (err != 0) + error (EXIT_FAILURE, err, "child: cannot get mutex"); + + puts ("child: got mutex; signalling"); + + pthread_cond_signal (&cond); + + puts ("child: unlock"); + + err = pthread_mutex_unlock (&mut); + if (err != 0) + error (EXIT_FAILURE, err, "child: cannot unlock"); + + puts ("child: done"); + + return NULL; +} + + +static int +do_test (void) +{ + pthread_t th; + int err; + + pthread_mutexattr_t ma; + pthread_condattr_t ca; + + printf ("&cond = %p\n&mut = %p\n", &cond, &mut); + + puts ("parent: setup condvar"); + + err = pthread_condattr_init(&ca); + if (err != 0) + error (EXIT_FAILURE, err, "parent: failed to init condattr"); + err = pthread_condattr_setprotocol_np(&ca, PTHREAD_PRIO_INHERIT); + if (err != 0) + error (EXIT_FAILURE, err, "parent: failed to set condattr protocol"); + err = pthread_cond_init(&cond, &ca); + if (err != 0) + error (EXIT_FAILURE, err, "parent: failed to init condvar"); + + puts ("parent: setup mutex"); + + err = pthread_mutexattr_init(&ma); + if (err != 0) + error (EXIT_FAILURE, err, "parent: failed to init mutexattr"); + err = pthread_mutexattr_setprotocol(&ma, PTHREAD_PRIO_INHERIT); + if (err != 0) + error (EXIT_FAILURE, err, "parent: failed to set mutexattr protocol"); + err = pthread_mutex_init(&mut, &ma); + if (err != 0) + error (EXIT_FAILURE, err, "parent: failed to init mutex"); + + puts ("parent: get mutex"); + + err = pthread_mutex_lock (&mut); + if (err != 0) + error (EXIT_FAILURE, err, "parent: cannot get mutex"); + + puts ("parent: create child"); + + err = pthread_create (&th, NULL, tf, NULL); + if (err != 0) + error (EXIT_FAILURE, err, "parent: cannot create thread"); + + puts ("parent: wait for condition"); + + err = pthread_cond_wait (&cond, &mut); + if (err != 0) + error (EXIT_FAILURE, err, "parent: cannot wait fir signal"); + + puts ("parent: got signal"); + + err = pthread_join (th, NULL); + if (err != 0) + error (EXIT_FAILURE, err, "parent: failed to join"); + + puts ("done"); + + return 0; +} + + +#define TEST_FUNCTION do_test () +#include "../test-skeleton.c"