1
0
mirror of https://sourceware.org/git/glibc.git synced 2026-01-06 11:51:29 +03:00

nptl: Fix PTHREAD_PRIO_PROTECT timed lock

The 878fe624d4 changed lll_futex_timed_wait, which expects a relative
timeout, with a __futex_abstimed_wait64, which expects an absolute
timeout.  However the code still passes a relative timeout.

Also, the PTHREAD_PRIO_PROTECT support for clocks different than
CLOCK_REALTIME was broken since the inclusion of
pthread_mutex_clocklock (9d20e22e46) since lll_futex_timed_wait
always use CLOCK_REALTIME.

This patch fixes by removing the relative time calculation.  It
also adds some xtests that tests both thread and inter-process
usage.

Checked on x86_64-linux-gnu.
This commit is contained in:
Adhemerval Zanella
2020-11-25 17:15:51 -03:00
parent 9ff2674ef8
commit 71eeae0325
6 changed files with 34 additions and 27 deletions

View File

@@ -27,6 +27,9 @@
#include <support/check.h>
#include <support/timespec.h>
#ifdef ENABLE_PP
#include "tst-tpp.h"
#endif
#ifndef TYPE
# define TYPE PTHREAD_MUTEX_NORMAL
@@ -47,8 +50,11 @@ do_test_clock (clockid_t clockid, const char *fnname)
TEST_COMPARE (pthread_mutexattr_init (&a), 0);
TEST_COMPARE (pthread_mutexattr_settype (&a, TYPE), 0);
#ifdef ENABLE_PI
#if defined ENABLE_PI
TEST_COMPARE (pthread_mutexattr_setprotocol (&a, PTHREAD_PRIO_INHERIT), 0);
#elif defined ENABLE_PP
TEST_COMPARE (pthread_mutexattr_setprotocol (&a, PTHREAD_PRIO_PROTECT), 0);
TEST_COMPARE (pthread_mutexattr_setprioceiling (&a, 6), 0);
#endif
int err = pthread_mutex_init (&m, &a);
@@ -110,6 +116,10 @@ do_test_clock (clockid_t clockid, const char *fnname)
static int do_test (void)
{
#ifdef ENABLE_PP
init_tpp_test ();
#endif
do_test_clock (CLOCK_USE_TIMEDLOCK, "timedlock");
do_test_clock (CLOCK_REALTIME, "clocklock(realtime)");
#ifndef ENABLE_PI