From 08cb9d728423df68140270d05c42f06614b468a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20B=C3=A9rat?= Date: Wed, 8 Jan 2025 17:34:21 +0100 Subject: [PATCH] Backport: Improve sem_trywait test coverage Resolves: RHEL-65354 --- glibc-RHEL-65354.patch | 109 +++++++++++++++++++++++++++++++++++++++++ glibc.spec | 2 + 2 files changed, 111 insertions(+) create mode 100644 glibc-RHEL-65354.patch diff --git a/glibc-RHEL-65354.patch b/glibc-RHEL-65354.patch new file mode 100644 index 0000000..5f93e8a --- /dev/null +++ b/glibc-RHEL-65354.patch @@ -0,0 +1,109 @@ +commit 3c2b9dc41cd05da055fae6f793a355063156bdf3 +Author: Joseph Myers +Date: Fri Nov 29 20:25:04 2024 +0000 + + Add threaded test of sem_trywait + + All the existing glibc tests of sem_trywait are single-threaded. Add + one that calls sem_trywait and sem_post in separate threads. + + Tested for x86_64. + +Conflicts: + sysdeps/pthread/Makefile (add new test) + +diff --git a/sysdeps/pthread/Makefile b/sysdeps/pthread/Makefile +index 6355e94171fbcdc3..5a1b26fa3c0e6061 100644 +--- a/sysdeps/pthread/Makefile ++++ b/sysdeps/pthread/Makefile +@@ -128,6 +128,7 @@ tests += tst-cnd-basic tst-mtx-trylock tst-cnd-broadcast \ + tst-pthread_kill-exiting \ + tst-cancel30 \ + tst-spin5 \ ++ tst-sem19 \ + # tests + + tests-time64 := \ +diff --git a/sysdeps/pthread/tst-sem19.c b/sysdeps/pthread/tst-sem19.c +new file mode 100644 +index 0000000000000000..9ef461e008ab9eab +--- /dev/null ++++ b/sysdeps/pthread/tst-sem19.c +@@ -0,0 +1,77 @@ ++/* Test sem_trywait with threads. ++ 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 ++ ++/* The test uses two threads, the main thread and a newly created ++ thread to test the operation of sem_trywait in a threaded scenario. ++ The intent is to test sem_trywait when it would return EAGAIN, and ++ then again after the critical section in the new thread has posted ++ to the semaphore and the main thread succeeds in calling ++ sem_trywait. It is possible this test fails with a timeout if the ++ second thread takes longer than the test timeout to acquire the ++ lock, and post. */ ++ ++static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER; ++static sem_t sem; ++ ++static void * ++tf (void *arg) ++{ ++ xpthread_mutex_lock (&lock); ++ sem_post (&sem); ++ xpthread_mutex_unlock (&lock); ++ return NULL; ++} ++ ++static int ++do_test (void) ++{ ++ int ret; ++ ++ ret = sem_init (&sem, 0, 0); ++ TEST_VERIFY_EXIT (ret == 0); ++ xpthread_mutex_lock (&lock); ++ pthread_t th = xpthread_create (NULL, tf, NULL); ++ errno = 0; ++ /* The other thread is waiting on the lock before it calls sem_post, ++ so sem_trywait should fail. */ ++ ret = sem_trywait (&sem); ++ TEST_COMPARE (ret, -1); ++ TEST_COMPARE (errno, EAGAIN); ++ xpthread_mutex_unlock (&lock); ++ /* The other thread now takes the lock, calls sem_post and releases ++ the lock. */ ++ for (;;) ++ { ++ errno = 0; ++ ret = sem_trywait (&sem); ++ if (ret == 0) ++ break; ++ TEST_COMPARE (errno, EAGAIN); ++ } ++ xpthread_join (th); ++ ++ return 0; ++} ++ ++#include diff --git a/glibc.spec b/glibc.spec index 1759a5c..605acc8 100644 --- a/glibc.spec +++ b/glibc.spec @@ -1052,6 +1052,7 @@ Patch744: glibc-RHEL-68850-1.patch Patch745: glibc-RHEL-68850-2.patch Patch746: glibc-RHEL-61568.patch Patch747: glibc-RHEL-58979.patch +Patch748: glibc-RHEL-65354.patch ############################################################################## # Continued list of core "glibc" package information: @@ -3065,6 +3066,7 @@ update_gconv_modules_cache () - Backport: Improve pthread_spin_trylock test coverage (RHEL-61568) - Backport: Implement test to verify dynamic linker behaves correctly in case of hash collision for the symbol name and symbol version. (RHEL-58979) +- Backport: Improve sem_trywait test coverage (RHEL-65354) * Thu Dec 19 2024 DJ Delorie - 2.34-148 - Increase ungetc test coverage, guarantee single char pushback (RHEL-46738)