From: Siddhesh Poyarekar Date: Thu, 21 Nov 2024 22:13:33 +0000 (-0500) Subject: nptl: Add smoke test for pthread_getcpuclockid failure X-Git-Tag: glibc-2.41~450 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=03b8d764109be48a53b18abd4b5050e8cdc2c6da;p=thirdparty%2Fglibc.git 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 --- 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