From 03b8d764109be48a53b18abd4b5050e8cdc2c6da Mon Sep 17 00:00:00 2001 From: Siddhesh Poyarekar Date: Thu, 21 Nov 2024 17:13:33 -0500 Subject: [PATCH] nptl: Add smoke test for pthread_getcpuclockid failure Exercise the case where an exited thread will cause pthread_getcpuclockid to fail. Signed-off-by: Siddhesh Poyarekar Reviewed-by: Florian Weimer --- nptl/Makefile | 1 + nptl/tst-pthread-getcpuclockid-invalid.c | 50 ++++++++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 nptl/tst-pthread-getcpuclockid-invalid.c diff --git a/nptl/Makefile b/nptl/Makefile index ceb91afafc..88077e27bb 100644 --- a/nptl/Makefile +++ b/nptl/Makefile @@ -319,6 +319,7 @@ tests = \ tst-pthread-defaultattr-free \ tst-pthread-gdb-attach \ tst-pthread-gdb-attach-static \ + tst-pthread-getcpuclockid-invalid \ tst-pthread-key1-static \ tst-pthread-timedlock-lockloop \ tst-pthread_exit-nothreads \ diff --git a/nptl/tst-pthread-getcpuclockid-invalid.c b/nptl/tst-pthread-getcpuclockid-invalid.c new file mode 100644 index 0000000000..e88a563427 --- /dev/null +++ b/nptl/tst-pthread-getcpuclockid-invalid.c @@ -0,0 +1,50 @@ +/* Smoke test to verify that pthread_getcpuclockid fails with ESRCH when the + thread in question has exited. + Copyright the GNU Toolchain Authors. + This file is part of the GNU C Library. + + 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 + +#include +#include +#include + +void * +thr (void *in) +{ + return in; +} + +int +do_test (void) +{ + clockid_t c; + pthread_t t = xpthread_create (NULL, thr, NULL); + + int ret = 0; + while ((ret = pthread_getcpuclockid (t, &c)) == 0) + sched_yield (); + + TEST_COMPARE (ret, ESRCH); + + return 0; +} + +#include