diff --git a/glibc-RHEL-61568.patch b/glibc-RHEL-61568.patch new file mode 100644 index 0000000..b28221c --- /dev/null +++ b/glibc-RHEL-61568.patch @@ -0,0 +1,114 @@ +commit bde47662b74b883149c3001e2c052dea5d3cd92f +Author: Sergey Kolosov +Date: Wed Nov 6 15:24:06 2024 +0100 + + nptl: Add new test for pthread_spin_trylock + + Add a threaded test for pthread_spin_trylock attempting to lock already + acquired spin lock and checking for correct return code. + + Reviewed-by: Florian Weimer + +Conflicts: + sysdeps/pthread/Makefile (add new test) + +diff --git a/sysdeps/pthread/Makefile b/sysdeps/pthread/Makefile +index d99c161c827ef4b8..6355e94171fbcdc3 100644 +--- a/sysdeps/pthread/Makefile ++++ b/sysdeps/pthread/Makefile +@@ -127,6 +127,7 @@ tests += tst-cnd-basic tst-mtx-trylock tst-cnd-broadcast \ + tst-pthread_kill-exited \ + tst-pthread_kill-exiting \ + tst-cancel30 \ ++ tst-spin5 \ + # tests + + tests-time64 := \ +diff --git a/sysdeps/pthread/tst-spin5.c b/sysdeps/pthread/tst-spin5.c +new file mode 100644 +index 0000000000000000..5c23bd48ef27b3ce +--- /dev/null ++++ b/sysdeps/pthread/tst-spin5.c +@@ -0,0 +1,82 @@ ++/* Threaded test the pthread_spin_trylock function. ++ Copyright (C) 2024 Free Software Foundation, Inc. ++ 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 ++ ++pthread_spinlock_t lock; ++ ++void * ++thread (void *arg) ++{ ++ int ret; ++ int thr_id = *(int *) arg; ++ ++ ret = pthread_spin_trylock (&lock); ++ if (thr_id == 1) ++ /* thread with already acquired lock. */ ++ { ++ if (ret != EBUSY) ++ { ++ FAIL_EXIT1 ("pthread_spin_trylock should fail with EBUSY"); ++ } ++ } ++ else if (thr_id == 2) ++ /* thread with released spin lock. */ ++ { ++ if (ret != 0) ++ { ++ FAIL_EXIT1 ("pthread_spin_trylock should be able to acquire lock"); ++ } ++ } ++ return NULL; ++} ++ ++static int ++do_test (void) ++{ ++ pthread_t thr1, thr2; ++ int ret; ++ int thr1_id = 1, thr2_id = 2; ++ ++ pthread_spin_init (&lock, PTHREAD_PROCESS_PRIVATE); ++ /* lock spin in main thread. */ ++ ret = pthread_spin_trylock (&lock); ++ if (ret != 0) ++ { ++ FAIL_EXIT1 ("Main thread should be able to acquire spin lock"); ++ } ++ ++ /* create first thread to try locking already acquired spin lock. */ ++ thr1 = xpthread_create (NULL, thread, &thr1_id); ++ xpthread_join (thr1); ++ ++ /* release spin lock and create thread to acquire released spin lock. */ ++ pthread_spin_unlock (&lock); ++ thr2 = xpthread_create (NULL, thread, &thr2_id); ++ xpthread_join (thr2); ++ ++ pthread_spin_destroy (&lock); ++ return 0; ++} ++ ++#include diff --git a/glibc.spec b/glibc.spec index 8985577..892e88b 100644 --- a/glibc.spec +++ b/glibc.spec @@ -1050,6 +1050,7 @@ Patch742: glibc-RHEL-70395-1.patch Patch743: glibc-RHEL-70395-2.patch Patch744: glibc-RHEL-68850-1.patch Patch745: glibc-RHEL-68850-2.patch +Patch746: glibc-RHEL-61568.patch ############################################################################## # Continued list of core "glibc" package information: @@ -3060,6 +3061,7 @@ update_gconv_modules_cache () - Backport new multi-threaded test for sem_getvalue (RHEL-69028) - Backport pthread_getcpuclockid tests (RHEL-70395) - Backport: Debug/tst-longjmp_chk3 needs to be enabled (RHEL-68850) +- Backport: Improve pthread_spin_trylock test coverage (RHEL-61568) * Thu Dec 19 2024 DJ Delorie - 2.34-148 - Increase ungetc test coverage, guarantee single char pushback (RHEL-46738)