nptl: Add pthread_clockjoin_np

Introduce pthread_clockjoin_np as a version of pthread_timedjoin_np that
accepts a clockid_t parameter to indicate which clock the timeout should be
measured against. This mirrors the recently-added POSIX-proposed "clock"
wait functions.

Checked on x86_64-linux-gnu.

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
This commit is contained in:
Mike Crowe 2019-10-31 10:03:21 -03:00 committed by Adhemerval Zanella
parent 893bbdd007
commit 69ca4b54c1
45 changed files with 235 additions and 28 deletions

4
NEWS
View file

@ -34,6 +34,10 @@ Major new features:
will always receive a 'struct timezone' whose tz_minuteswest and will always receive a 'struct timezone' whose tz_minuteswest and
tz_dsttime fields are zero. tz_dsttime fields are zero.
* The function pthread_clockjoin_np has been added, enabling join with a
terminated thread with an specific clock. It allows waiting against
CLOCK_MONOTONIC and CLOCK_REALTIME. This function is a GNU extension.
Deprecated and removed features, and other changes affecting compatibility: Deprecated and removed features, and other changes affecting compatibility:
* The totalorder and totalordermag functions, and the corresponding * The totalorder and totalordermag functions, and the corresponding

View file

@ -751,6 +751,18 @@ reached if the thread has not terminated by that time and return
will wait forever in the same way as @code{pthread_join}. will wait forever in the same way as @code{pthread_join}.
@end deftypefun @end deftypefun
@comment pthread.h
@comment GNU extension
@deftypefun int pthread_clockjoin_np (pthread_t *@var{thread},
void **@var{thread_return},
clockid_t @var{clockid},
const struct timespec *@var{abstime})
@standards{GNU, pthread.h}
@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}}
Behaves like @code{pthread_timedjoin_np} except that time absolute time in
@var{abstime} is measured against the clock specified by @var{clockid}.
@end deftypefun
@c FIXME these are undocumented: @c FIXME these are undocumented:
@c pthread_atfork @c pthread_atfork
@c pthread_attr_destroy @c pthread_attr_destroy

View file

@ -53,7 +53,7 @@ pthread-compat-wrappers = \
libpthread-routines = nptl-init nptlfreeres vars events version pt-interp \ libpthread-routines = nptl-init nptlfreeres vars events version pt-interp \
pthread_create pthread_exit pthread_detach \ pthread_create pthread_exit pthread_detach \
pthread_join pthread_tryjoin pthread_timedjoin \ pthread_join pthread_tryjoin pthread_timedjoin \
pthread_join_common pthread_yield \ pthread_clockjoin pthread_join_common pthread_yield \
pthread_getconcurrency pthread_setconcurrency \ pthread_getconcurrency pthread_setconcurrency \
pthread_getschedparam pthread_setschedparam \ pthread_getschedparam pthread_setschedparam \
pthread_setschedprio \ pthread_setschedprio \
@ -189,6 +189,7 @@ CFLAGS-forward.c += -fexceptions
CFLAGS-pthread_testcancel.c += -fexceptions CFLAGS-pthread_testcancel.c += -fexceptions
CFLAGS-pthread_join.c += -fexceptions -fasynchronous-unwind-tables CFLAGS-pthread_join.c += -fexceptions -fasynchronous-unwind-tables
CFLAGS-pthread_timedjoin.c += -fexceptions -fasynchronous-unwind-tables CFLAGS-pthread_timedjoin.c += -fexceptions -fasynchronous-unwind-tables
CFLAGS-pthread_clockjoin.c += -fexceptions -fasynchronous-unwind-tables
CFLAGS-pthread_once.c += $(uses-callbacks) -fexceptions \ CFLAGS-pthread_once.c += $(uses-callbacks) -fexceptions \
-fasynchronous-unwind-tables -fasynchronous-unwind-tables
CFLAGS-pthread_cond_wait.c += -fexceptions -fasynchronous-unwind-tables CFLAGS-pthread_cond_wait.c += -fexceptions -fasynchronous-unwind-tables
@ -273,7 +274,7 @@ tests = tst-attr1 tst-attr2 tst-attr3 tst-default-attr \
tst-kill1 tst-kill2 tst-kill3 tst-kill4 tst-kill5 tst-kill6 \ tst-kill1 tst-kill2 tst-kill3 tst-kill4 tst-kill5 tst-kill6 \
tst-raise1 \ tst-raise1 \
tst-join1 tst-join2 tst-join3 tst-join4 tst-join5 tst-join6 tst-join7 \ tst-join1 tst-join2 tst-join3 tst-join4 tst-join5 tst-join6 tst-join7 \
tst-join8 tst-join9 \ tst-join8 tst-join9 tst-join10 tst-join11 tst-join12 tst-join13 \
tst-detach1 \ tst-detach1 \
tst-eintr2 tst-eintr3 tst-eintr4 tst-eintr5 \ tst-eintr2 tst-eintr3 tst-eintr4 tst-eintr5 \
tst-tsd1 tst-tsd2 tst-tsd3 tst-tsd4 tst-tsd5 tst-tsd6 \ tst-tsd1 tst-tsd2 tst-tsd3 tst-tsd4 tst-tsd5 tst-tsd6 \

View file

@ -277,6 +277,10 @@ libpthread {
pthread_mutex_clocklock; pthread_mutex_clocklock;
} }
GLIBC_2.31 {
pthread_clockjoin_np;
}
GLIBC_PRIVATE { GLIBC_PRIVATE {
__pthread_initialize_minimal; __pthread_initialize_minimal;
__pthread_clock_gettime; __pthread_clock_settime; __pthread_clock_gettime; __pthread_clock_settime;

View file

@ -475,8 +475,10 @@ extern int __pthread_setcanceltype (int type, int *oldtype);
extern int __pthread_enable_asynccancel (void) attribute_hidden; extern int __pthread_enable_asynccancel (void) attribute_hidden;
extern void __pthread_disable_asynccancel (int oldtype) attribute_hidden; extern void __pthread_disable_asynccancel (int oldtype) attribute_hidden;
extern void __pthread_testcancel (void); extern void __pthread_testcancel (void);
extern int __pthread_timedjoin_ex (pthread_t, void **, const struct timespec *, extern int __pthread_clockjoin_ex (pthread_t, void **, clockid_t,
bool); const struct timespec *, bool)
attribute_hidden;
#if IS_IN (libpthread) #if IS_IN (libpthread)
hidden_proto (__pthread_mutex_init) hidden_proto (__pthread_mutex_init)
@ -495,7 +497,6 @@ hidden_proto (__pthread_setcancelstate)
hidden_proto (__pthread_testcancel) hidden_proto (__pthread_testcancel)
hidden_proto (__pthread_mutexattr_init) hidden_proto (__pthread_mutexattr_init)
hidden_proto (__pthread_mutexattr_settype) hidden_proto (__pthread_mutexattr_settype)
hidden_proto (__pthread_timedjoin_ex)
#endif #endif
extern int __pthread_cond_broadcast_2_0 (pthread_cond_2_0_t *cond); extern int __pthread_cond_broadcast_2_0 (pthread_cond_2_0_t *cond);

29
nptl/pthread_clockjoin.c Normal file
View file

@ -0,0 +1,29 @@
/* Join with a terminated thread using an specific clock.
Copyright (C) 2019 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
<http://www.gnu.org/licenses/>. */
#include "pthreadP.h"
int
__pthread_clockjoin_np (pthread_t threadid, void **thread_return,
clockid_t clockid,
const struct timespec *abstime)
{
return __pthread_clockjoin_ex (threadid, thread_return,
clockid, abstime, true);
}
weak_alias (__pthread_clockjoin_np, pthread_clockjoin_np)

View file

@ -21,6 +21,7 @@
int int
__pthread_join (pthread_t threadid, void **thread_return) __pthread_join (pthread_t threadid, void **thread_return)
{ {
return __pthread_timedjoin_ex (threadid, thread_return, NULL, true); return __pthread_clockjoin_ex (threadid, thread_return, 0 /* Ignored */,
NULL, true);
} }
weak_alias (__pthread_join, pthread_join) weak_alias (__pthread_join, pthread_join)

View file

@ -37,7 +37,7 @@ cleanup (void *arg)
afterwards. The kernel up to version 3.16.3 does not use the private futex afterwards. The kernel up to version 3.16.3 does not use the private futex
operations for futex wake-up when the clone terminates. */ operations for futex wake-up when the clone terminates. */
static int static int
timedwait_tid (pid_t *tidp, const struct timespec *abstime) clockwait_tid (pid_t *tidp, clockid_t clockid, const struct timespec *abstime)
{ {
pid_t tid; pid_t tid;
@ -49,8 +49,10 @@ timedwait_tid (pid_t *tidp, const struct timespec *abstime)
{ {
struct timespec rt; struct timespec rt;
/* Get the current time. */ /* Get the current time. This can only fail if clockid is
__clock_gettime (CLOCK_REALTIME, &rt); invalid. */
if (__glibc_unlikely (__clock_gettime (clockid, &rt)))
return EINVAL;
/* Compute relative timeout. */ /* Compute relative timeout. */
rt.tv_sec = abstime->tv_sec - rt.tv_sec; rt.tv_sec = abstime->tv_sec - rt.tv_sec;
@ -77,7 +79,8 @@ timedwait_tid (pid_t *tidp, const struct timespec *abstime)
} }
int int
__pthread_timedjoin_ex (pthread_t threadid, void **thread_return, __pthread_clockjoin_ex (pthread_t threadid, void **thread_return,
clockid_t clockid,
const struct timespec *abstime, bool block) const struct timespec *abstime, bool block)
{ {
struct pthread *pd = (struct pthread *) threadid; struct pthread *pd = (struct pthread *) threadid;
@ -122,7 +125,7 @@ __pthread_timedjoin_ex (pthread_t threadid, void **thread_return,
/* BLOCK waits either indefinitely or based on an absolute time. POSIX also /* BLOCK waits either indefinitely or based on an absolute time. POSIX also
states a cancellation point shall occur for pthread_join, and we use the states a cancellation point shall occur for pthread_join, and we use the
same rationale for posix_timedjoin_np. Both timedwait_tid and the futex same rationale for posix_timedjoin_np. Both clockwait_tid and the futex
call use the cancellable variant. */ call use the cancellable variant. */
if (block) if (block)
{ {
@ -132,7 +135,7 @@ __pthread_timedjoin_ex (pthread_t threadid, void **thread_return,
pthread_cleanup_push (cleanup, &pd->joinid); pthread_cleanup_push (cleanup, &pd->joinid);
if (abstime != NULL) if (abstime != NULL)
result = timedwait_tid (&pd->tid, abstime); result = clockwait_tid (&pd->tid, clockid, abstime);
else else
{ {
pid_t tid; pid_t tid;
@ -165,4 +168,3 @@ __pthread_timedjoin_ex (pthread_t threadid, void **thread_return,
return result; return result;
} }
hidden_def (__pthread_timedjoin_ex)

View file

@ -22,6 +22,7 @@ int
__pthread_timedjoin_np (pthread_t threadid, void **thread_return, __pthread_timedjoin_np (pthread_t threadid, void **thread_return,
const struct timespec *abstime) const struct timespec *abstime)
{ {
return __pthread_timedjoin_ex (threadid, thread_return, abstime, true); return __pthread_clockjoin_ex (threadid, thread_return,
CLOCK_REALTIME, abstime, true);
} }
weak_alias (__pthread_timedjoin_np, pthread_timedjoin_np) weak_alias (__pthread_timedjoin_np, pthread_timedjoin_np)

View file

@ -28,5 +28,6 @@ pthread_tryjoin_np (pthread_t threadid, void **thread_return)
/* If pd->tid == 0 then lll_wait_tid will not block on futex /* If pd->tid == 0 then lll_wait_tid will not block on futex
operation. */ operation. */
return __pthread_timedjoin_ex (threadid, thread_return, NULL, false); return __pthread_clockjoin_ex (threadid, thread_return, 0 /* Ignored */,
NULL, false);
} }

View file

@ -22,7 +22,7 @@ int
thrd_join (thrd_t thr, int *res) thrd_join (thrd_t thr, int *res)
{ {
void *pthread_res; void *pthread_res;
int err_code = __pthread_timedjoin_ex (thr, &pthread_res, NULL, true); int err_code = __pthread_clockjoin_ex (thr, &pthread_res, 0, NULL, true);
if (res) if (res)
*res = (int) (uintptr_t) pthread_res; *res = (int) (uintptr_t) pthread_res;

20
nptl/tst-join10.c Normal file
View file

@ -0,0 +1,20 @@
/* Check if pthread_clockjoin_np is a cancellation entrypoint.
Copyright (C) 2019 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
<http://www.gnu.org/licenses/>. */
#define USE_PTHREAD_CLOCKJOIN_NP_REALTIME 1
#include <nptl/tst-join5.c>

21
nptl/tst-join11.c Normal file
View file

@ -0,0 +1,21 @@
/* Check if pthread_clockjoin_np is a cancellation entrypoint.
Copyright (C) 2019 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
<http://www.gnu.org/licenses/>. */
#define USE_PTHREAD_CLOCKJOIN_NP_REALTIME 1
#define WAIT_IN_CHILD 1
#include <nptl/tst-join5.c>

20
nptl/tst-join12.c Normal file
View file

@ -0,0 +1,20 @@
/* Check if pthread_clockjoin_np is a cancellation entrypoint.
Copyright (C) 2019 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
<http://www.gnu.org/licenses/>. */
#define USE_PTHREAD_CLOCKJOIN_NP_MONOTONIC 1
#include <nptl/tst-join5.c>

21
nptl/tst-join13.c Normal file
View file

@ -0,0 +1,21 @@
/* Check if pthread_clockjoin_np is a cancellation entrypoint.
Copyright (C) 2019 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
<http://www.gnu.org/licenses/>. */
#define USE_PTHREAD_CLOCKJOIN_NP_MONOTONIC 1
#define WAIT_IN_CHILD 1
#include <nptl/tst-join5.c>

View file

@ -28,6 +28,8 @@
#include <support/xtime.h> #include <support/xtime.h>
#define CLOCK_USE_TIMEDJOIN (-1)
static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER; static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
@ -35,32 +37,44 @@ static void *
tf (void *arg) tf (void *arg)
{ {
xpthread_mutex_lock (&lock); xpthread_mutex_lock (&lock);
xpthread_mutex_unlock (&lock);
return (void *) 42l; return (void *) 42l;
} }
static int static int
do_test (void) do_test_clock (clockid_t clockid)
{ {
const clockid_t clockid_for_get =
(clockid == CLOCK_USE_TIMEDJOIN) ? CLOCK_REALTIME : clockid;
xpthread_mutex_lock (&lock); xpthread_mutex_lock (&lock);
pthread_t th = xpthread_create (NULL, tf, NULL); pthread_t th = xpthread_create (NULL, tf, NULL);
void *status; void *status;
struct timespec timeout = timespec_add (xclock_now (CLOCK_REALTIME), struct timespec timeout = timespec_add (xclock_now (clockid_for_get),
make_timespec (0, 200000000)); make_timespec (0, 200000000));
int val = pthread_timedjoin_np (th, &status, &timeout); int val;
if (clockid == CLOCK_USE_TIMEDJOIN)
val = pthread_timedjoin_np (th, &status, &timeout);
else
val = pthread_clockjoin_np (th, &status, clockid, &timeout);
TEST_COMPARE (val, ETIMEDOUT); TEST_COMPARE (val, ETIMEDOUT);
xpthread_mutex_unlock (&lock); xpthread_mutex_unlock (&lock);
while (1) while (1)
{ {
timeout = timespec_add (xclock_now (CLOCK_REALTIME), timeout = timespec_add (xclock_now (clockid_for_get),
make_timespec (0, 200000000)); make_timespec (0, 200000000));
val = pthread_timedjoin_np (th, &status, &timeout); if (clockid == CLOCK_USE_TIMEDJOIN)
val = pthread_timedjoin_np (th, &status, &timeout);
else
val = pthread_clockjoin_np (th, &status, clockid, &timeout);
if (val == 0) if (val == 0)
break; break;
@ -73,4 +87,13 @@ do_test (void)
return 0; return 0;
} }
static int
do_test (void)
{
do_test_clock (CLOCK_USE_TIMEDJOIN);
do_test_clock (CLOCK_REALTIME);
do_test_clock (CLOCK_MONOTONIC);
return 0;
}
#include <support/test-driver.c> #include <support/test-driver.c>

View file

@ -24,7 +24,9 @@
#include <unistd.h> #include <unistd.h>
#include <support/check.h> #include <support/check.h>
#include <support/timespec.h>
#include <support/xthread.h> #include <support/xthread.h>
#include <support/xtime.h>
static void static void
wait_code (void) wait_code (void)
@ -42,14 +44,20 @@ static pthread_barrier_t b;
static int static int
thread_join (pthread_t thread, void **retval) thread_join (pthread_t thread, void **retval)
{ {
#ifdef USE_PTHREAD_TIMEDJOIN_NP #if defined USE_PTHREAD_TIMEDJOIN_NP
struct timespec tv; const struct timespec ts = timespec_add (xclock_now (CLOCK_REALTIME),
TEST_COMPARE (clock_gettime (CLOCK_REALTIME, &tv), 0); make_timespec (1000, 0));
/* Arbitrary large timeout to make it act as pthread_join. */ return pthread_timedjoin_np (thread, retval, &ts);
tv.tv_sec += 1000; #elif defined USE_PTHREAD_CLOCKJOIN_NP_REALTIME
return pthread_timedjoin_np ((pthread_t) thread, retval, &tv); const struct timespec ts = timespec_add (xclock_now (CLOCK_REALTIME),
make_timespec (1000, 0));
return pthread_clockjoin_np (thread, retval, CLOCK_REALTIME, &ts);
#elif defined USE_PTHREAD_CLOCKJOIN_NP_MONOTONIC
const struct timespec ts = timespec_add (xclock_now (CLOCK_MONOTONIC),
make_timespec (1000, 0));
return pthread_clockjoin_np (thread, retval, CLOCK_MONOTONIC, &ts);
#else #else
return pthread_join ((pthread_t) thread, retval); return pthread_join (thread, retval);
#endif #endif
} }

View file

@ -263,6 +263,17 @@ extern int pthread_tryjoin_np (pthread_t __th, void **__thread_return) __THROW;
__THROW. */ __THROW. */
extern int pthread_timedjoin_np (pthread_t __th, void **__thread_return, extern int pthread_timedjoin_np (pthread_t __th, void **__thread_return,
const struct timespec *__abstime); const struct timespec *__abstime);
/* Make calling thread wait for termination of the thread TH, but only
until TIMEOUT measured against the clock specified by CLOCKID. The
exit status of the thread is stored in *THREAD_RETURN, if
THREAD_RETURN is not NULL.
This function is a cancellation point and therefore not marked with
__THROW. */
extern int pthread_clockjoin_np (pthread_t __th, void **__thread_return,
clockid_t clockid,
const struct timespec *__abstime);
#endif #endif
/* Indicate that the thread TH is never to be joined with PTHREAD_JOIN. /* Indicate that the thread TH is never to be joined with PTHREAD_JOIN.

View file

@ -236,3 +236,4 @@ GLIBC_2.30 pthread_mutex_clocklock F
GLIBC_2.30 pthread_rwlock_clockrdlock F GLIBC_2.30 pthread_rwlock_clockrdlock F
GLIBC_2.30 pthread_rwlock_clockwrlock F GLIBC_2.30 pthread_rwlock_clockwrlock F
GLIBC_2.30 sem_clockwait F GLIBC_2.30 sem_clockwait F
GLIBC_2.31 pthread_clockjoin_np F

View file

@ -248,6 +248,7 @@ GLIBC_2.30 pthread_mutex_clocklock F
GLIBC_2.30 pthread_rwlock_clockrdlock F GLIBC_2.30 pthread_rwlock_clockrdlock F
GLIBC_2.30 pthread_rwlock_clockwrlock F GLIBC_2.30 pthread_rwlock_clockwrlock F
GLIBC_2.30 sem_clockwait F GLIBC_2.30 sem_clockwait F
GLIBC_2.31 pthread_clockjoin_np F
GLIBC_2.4 pthread_mutex_consistent_np F GLIBC_2.4 pthread_mutex_consistent_np F
GLIBC_2.4 pthread_mutex_getprioceiling F GLIBC_2.4 pthread_mutex_getprioceiling F
GLIBC_2.4 pthread_mutex_setprioceiling F GLIBC_2.4 pthread_mutex_setprioceiling F

View file

@ -32,6 +32,7 @@ GLIBC_2.30 pthread_mutex_clocklock F
GLIBC_2.30 pthread_rwlock_clockrdlock F GLIBC_2.30 pthread_rwlock_clockrdlock F
GLIBC_2.30 pthread_rwlock_clockwrlock F GLIBC_2.30 pthread_rwlock_clockwrlock F
GLIBC_2.30 sem_clockwait F GLIBC_2.30 sem_clockwait F
GLIBC_2.31 pthread_clockjoin_np F
GLIBC_2.4 _IO_flockfile F GLIBC_2.4 _IO_flockfile F
GLIBC_2.4 _IO_ftrylockfile F GLIBC_2.4 _IO_ftrylockfile F
GLIBC_2.4 _IO_funlockfile F GLIBC_2.4 _IO_funlockfile F

View file

@ -32,6 +32,7 @@ GLIBC_2.30 pthread_mutex_clocklock F
GLIBC_2.30 pthread_rwlock_clockrdlock F GLIBC_2.30 pthread_rwlock_clockrdlock F
GLIBC_2.30 pthread_rwlock_clockwrlock F GLIBC_2.30 pthread_rwlock_clockwrlock F
GLIBC_2.30 sem_clockwait F GLIBC_2.30 sem_clockwait F
GLIBC_2.31 pthread_clockjoin_np F
GLIBC_2.4 _IO_flockfile F GLIBC_2.4 _IO_flockfile F
GLIBC_2.4 _IO_ftrylockfile F GLIBC_2.4 _IO_ftrylockfile F
GLIBC_2.4 _IO_funlockfile F GLIBC_2.4 _IO_funlockfile F

View file

@ -229,3 +229,4 @@ GLIBC_2.30 pthread_mutex_clocklock F
GLIBC_2.30 pthread_rwlock_clockrdlock F GLIBC_2.30 pthread_rwlock_clockrdlock F
GLIBC_2.30 pthread_rwlock_clockwrlock F GLIBC_2.30 pthread_rwlock_clockwrlock F
GLIBC_2.30 sem_clockwait F GLIBC_2.30 sem_clockwait F
GLIBC_2.31 pthread_clockjoin_np F

View file

@ -238,6 +238,7 @@ GLIBC_2.30 pthread_mutex_clocklock F
GLIBC_2.30 pthread_rwlock_clockrdlock F GLIBC_2.30 pthread_rwlock_clockrdlock F
GLIBC_2.30 pthread_rwlock_clockwrlock F GLIBC_2.30 pthread_rwlock_clockwrlock F
GLIBC_2.30 sem_clockwait F GLIBC_2.30 sem_clockwait F
GLIBC_2.31 pthread_clockjoin_np F
GLIBC_2.4 pthread_mutex_consistent_np F GLIBC_2.4 pthread_mutex_consistent_np F
GLIBC_2.4 pthread_mutex_getprioceiling F GLIBC_2.4 pthread_mutex_getprioceiling F
GLIBC_2.4 pthread_mutex_setprioceiling F GLIBC_2.4 pthread_mutex_setprioceiling F

View file

@ -246,6 +246,7 @@ GLIBC_2.30 pthread_mutex_clocklock F
GLIBC_2.30 pthread_rwlock_clockrdlock F GLIBC_2.30 pthread_rwlock_clockrdlock F
GLIBC_2.30 pthread_rwlock_clockwrlock F GLIBC_2.30 pthread_rwlock_clockwrlock F
GLIBC_2.30 sem_clockwait F GLIBC_2.30 sem_clockwait F
GLIBC_2.31 pthread_clockjoin_np F
GLIBC_2.4 pthread_mutex_consistent_np F GLIBC_2.4 pthread_mutex_consistent_np F
GLIBC_2.4 pthread_mutex_getprioceiling F GLIBC_2.4 pthread_mutex_getprioceiling F
GLIBC_2.4 pthread_mutex_setprioceiling F GLIBC_2.4 pthread_mutex_setprioceiling F

View file

@ -240,6 +240,7 @@ GLIBC_2.30 pthread_mutex_clocklock F
GLIBC_2.30 pthread_rwlock_clockrdlock F GLIBC_2.30 pthread_rwlock_clockrdlock F
GLIBC_2.30 pthread_rwlock_clockwrlock F GLIBC_2.30 pthread_rwlock_clockwrlock F
GLIBC_2.30 sem_clockwait F GLIBC_2.30 sem_clockwait F
GLIBC_2.31 pthread_clockjoin_np F
GLIBC_2.4 pthread_mutex_consistent_np F GLIBC_2.4 pthread_mutex_consistent_np F
GLIBC_2.4 pthread_mutex_getprioceiling F GLIBC_2.4 pthread_mutex_getprioceiling F
GLIBC_2.4 pthread_mutex_setprioceiling F GLIBC_2.4 pthread_mutex_setprioceiling F

View file

@ -32,6 +32,7 @@ GLIBC_2.30 pthread_mutex_clocklock F
GLIBC_2.30 pthread_rwlock_clockrdlock F GLIBC_2.30 pthread_rwlock_clockrdlock F
GLIBC_2.30 pthread_rwlock_clockwrlock F GLIBC_2.30 pthread_rwlock_clockwrlock F
GLIBC_2.30 sem_clockwait F GLIBC_2.30 sem_clockwait F
GLIBC_2.31 pthread_clockjoin_np F
GLIBC_2.4 _IO_flockfile F GLIBC_2.4 _IO_flockfile F
GLIBC_2.4 _IO_ftrylockfile F GLIBC_2.4 _IO_ftrylockfile F
GLIBC_2.4 _IO_funlockfile F GLIBC_2.4 _IO_funlockfile F

View file

@ -246,6 +246,7 @@ GLIBC_2.30 pthread_mutex_clocklock F
GLIBC_2.30 pthread_rwlock_clockrdlock F GLIBC_2.30 pthread_rwlock_clockrdlock F
GLIBC_2.30 pthread_rwlock_clockwrlock F GLIBC_2.30 pthread_rwlock_clockwrlock F
GLIBC_2.30 sem_clockwait F GLIBC_2.30 sem_clockwait F
GLIBC_2.31 pthread_clockjoin_np F
GLIBC_2.4 pthread_mutex_consistent_np F GLIBC_2.4 pthread_mutex_consistent_np F
GLIBC_2.4 pthread_mutex_getprioceiling F GLIBC_2.4 pthread_mutex_getprioceiling F
GLIBC_2.4 pthread_mutex_setprioceiling F GLIBC_2.4 pthread_mutex_setprioceiling F

View file

@ -236,3 +236,4 @@ GLIBC_2.30 pthread_mutex_clocklock F
GLIBC_2.30 pthread_rwlock_clockrdlock F GLIBC_2.30 pthread_rwlock_clockrdlock F
GLIBC_2.30 pthread_rwlock_clockwrlock F GLIBC_2.30 pthread_rwlock_clockwrlock F
GLIBC_2.30 sem_clockwait F GLIBC_2.30 sem_clockwait F
GLIBC_2.31 pthread_clockjoin_np F

View file

@ -236,3 +236,4 @@ GLIBC_2.30 pthread_mutex_clocklock F
GLIBC_2.30 pthread_rwlock_clockrdlock F GLIBC_2.30 pthread_rwlock_clockrdlock F
GLIBC_2.30 pthread_rwlock_clockwrlock F GLIBC_2.30 pthread_rwlock_clockwrlock F
GLIBC_2.30 sem_clockwait F GLIBC_2.30 sem_clockwait F
GLIBC_2.31 pthread_clockjoin_np F

View file

@ -247,6 +247,7 @@ GLIBC_2.30 pthread_mutex_clocklock F
GLIBC_2.30 pthread_rwlock_clockrdlock F GLIBC_2.30 pthread_rwlock_clockrdlock F
GLIBC_2.30 pthread_rwlock_clockwrlock F GLIBC_2.30 pthread_rwlock_clockwrlock F
GLIBC_2.30 sem_clockwait F GLIBC_2.30 sem_clockwait F
GLIBC_2.31 pthread_clockjoin_np F
GLIBC_2.4 pthread_mutex_consistent_np F GLIBC_2.4 pthread_mutex_consistent_np F
GLIBC_2.4 pthread_mutex_getprioceiling F GLIBC_2.4 pthread_mutex_getprioceiling F
GLIBC_2.4 pthread_mutex_setprioceiling F GLIBC_2.4 pthread_mutex_setprioceiling F

View file

@ -247,6 +247,7 @@ GLIBC_2.30 pthread_mutex_clocklock F
GLIBC_2.30 pthread_rwlock_clockrdlock F GLIBC_2.30 pthread_rwlock_clockrdlock F
GLIBC_2.30 pthread_rwlock_clockwrlock F GLIBC_2.30 pthread_rwlock_clockwrlock F
GLIBC_2.30 sem_clockwait F GLIBC_2.30 sem_clockwait F
GLIBC_2.31 pthread_clockjoin_np F
GLIBC_2.4 pthread_mutex_consistent_np F GLIBC_2.4 pthread_mutex_consistent_np F
GLIBC_2.4 pthread_mutex_getprioceiling F GLIBC_2.4 pthread_mutex_getprioceiling F
GLIBC_2.4 pthread_mutex_setprioceiling F GLIBC_2.4 pthread_mutex_setprioceiling F

View file

@ -236,3 +236,4 @@ GLIBC_2.30 pthread_mutex_clocklock F
GLIBC_2.30 pthread_rwlock_clockrdlock F GLIBC_2.30 pthread_rwlock_clockrdlock F
GLIBC_2.30 pthread_rwlock_clockwrlock F GLIBC_2.30 pthread_rwlock_clockwrlock F
GLIBC_2.30 sem_clockwait F GLIBC_2.30 sem_clockwait F
GLIBC_2.31 pthread_clockjoin_np F

View file

@ -248,6 +248,7 @@ GLIBC_2.30 pthread_mutex_clocklock F
GLIBC_2.30 pthread_rwlock_clockrdlock F GLIBC_2.30 pthread_rwlock_clockrdlock F
GLIBC_2.30 pthread_rwlock_clockwrlock F GLIBC_2.30 pthread_rwlock_clockwrlock F
GLIBC_2.30 sem_clockwait F GLIBC_2.30 sem_clockwait F
GLIBC_2.31 pthread_clockjoin_np F
GLIBC_2.4 pthread_mutex_consistent_np F GLIBC_2.4 pthread_mutex_consistent_np F
GLIBC_2.4 pthread_mutex_getprioceiling F GLIBC_2.4 pthread_mutex_getprioceiling F
GLIBC_2.4 pthread_mutex_setprioceiling F GLIBC_2.4 pthread_mutex_setprioceiling F

View file

@ -239,6 +239,7 @@ GLIBC_2.30 pthread_mutex_clocklock F
GLIBC_2.30 pthread_rwlock_clockrdlock F GLIBC_2.30 pthread_rwlock_clockrdlock F
GLIBC_2.30 pthread_rwlock_clockwrlock F GLIBC_2.30 pthread_rwlock_clockwrlock F
GLIBC_2.30 sem_clockwait F GLIBC_2.30 sem_clockwait F
GLIBC_2.31 pthread_clockjoin_np F
GLIBC_2.4 pthread_mutex_consistent_np F GLIBC_2.4 pthread_mutex_consistent_np F
GLIBC_2.4 pthread_mutex_getprioceiling F GLIBC_2.4 pthread_mutex_getprioceiling F
GLIBC_2.4 pthread_mutex_setprioceiling F GLIBC_2.4 pthread_mutex_setprioceiling F

View file

@ -236,3 +236,4 @@ GLIBC_2.30 pthread_mutex_clocklock F
GLIBC_2.30 pthread_rwlock_clockrdlock F GLIBC_2.30 pthread_rwlock_clockrdlock F
GLIBC_2.30 pthread_rwlock_clockwrlock F GLIBC_2.30 pthread_rwlock_clockwrlock F
GLIBC_2.30 sem_clockwait F GLIBC_2.30 sem_clockwait F
GLIBC_2.31 pthread_clockjoin_np F

View file

@ -231,3 +231,4 @@ GLIBC_2.30 pthread_mutex_clocklock F
GLIBC_2.30 pthread_rwlock_clockrdlock F GLIBC_2.30 pthread_rwlock_clockrdlock F
GLIBC_2.30 pthread_rwlock_clockwrlock F GLIBC_2.30 pthread_rwlock_clockwrlock F
GLIBC_2.30 sem_clockwait F GLIBC_2.30 sem_clockwait F
GLIBC_2.31 pthread_clockjoin_np F

View file

@ -248,6 +248,7 @@ GLIBC_2.30 pthread_mutex_clocklock F
GLIBC_2.30 pthread_rwlock_clockrdlock F GLIBC_2.30 pthread_rwlock_clockrdlock F
GLIBC_2.30 pthread_rwlock_clockwrlock F GLIBC_2.30 pthread_rwlock_clockwrlock F
GLIBC_2.30 sem_clockwait F GLIBC_2.30 sem_clockwait F
GLIBC_2.31 pthread_clockjoin_np F
GLIBC_2.4 pthread_mutex_consistent_np F GLIBC_2.4 pthread_mutex_consistent_np F
GLIBC_2.4 pthread_mutex_getprioceiling F GLIBC_2.4 pthread_mutex_getprioceiling F
GLIBC_2.4 pthread_mutex_setprioceiling F GLIBC_2.4 pthread_mutex_setprioceiling F

View file

@ -240,6 +240,7 @@ GLIBC_2.30 pthread_mutex_clocklock F
GLIBC_2.30 pthread_rwlock_clockrdlock F GLIBC_2.30 pthread_rwlock_clockrdlock F
GLIBC_2.30 pthread_rwlock_clockwrlock F GLIBC_2.30 pthread_rwlock_clockwrlock F
GLIBC_2.30 sem_clockwait F GLIBC_2.30 sem_clockwait F
GLIBC_2.31 pthread_clockjoin_np F
GLIBC_2.4 pthread_mutex_consistent_np F GLIBC_2.4 pthread_mutex_consistent_np F
GLIBC_2.4 pthread_mutex_getprioceiling F GLIBC_2.4 pthread_mutex_getprioceiling F
GLIBC_2.4 pthread_mutex_setprioceiling F GLIBC_2.4 pthread_mutex_setprioceiling F

View file

@ -238,6 +238,7 @@ GLIBC_2.30 pthread_mutex_clocklock F
GLIBC_2.30 pthread_rwlock_clockrdlock F GLIBC_2.30 pthread_rwlock_clockrdlock F
GLIBC_2.30 pthread_rwlock_clockwrlock F GLIBC_2.30 pthread_rwlock_clockwrlock F
GLIBC_2.30 sem_clockwait F GLIBC_2.30 sem_clockwait F
GLIBC_2.31 pthread_clockjoin_np F
GLIBC_2.4 pthread_mutex_consistent_np F GLIBC_2.4 pthread_mutex_consistent_np F
GLIBC_2.4 pthread_mutex_getprioceiling F GLIBC_2.4 pthread_mutex_getprioceiling F
GLIBC_2.4 pthread_mutex_setprioceiling F GLIBC_2.4 pthread_mutex_setprioceiling F

View file

@ -238,6 +238,7 @@ GLIBC_2.30 pthread_mutex_clocklock F
GLIBC_2.30 pthread_rwlock_clockrdlock F GLIBC_2.30 pthread_rwlock_clockrdlock F
GLIBC_2.30 pthread_rwlock_clockwrlock F GLIBC_2.30 pthread_rwlock_clockwrlock F
GLIBC_2.30 sem_clockwait F GLIBC_2.30 sem_clockwait F
GLIBC_2.31 pthread_clockjoin_np F
GLIBC_2.4 pthread_mutex_consistent_np F GLIBC_2.4 pthread_mutex_consistent_np F
GLIBC_2.4 pthread_mutex_getprioceiling F GLIBC_2.4 pthread_mutex_getprioceiling F
GLIBC_2.4 pthread_mutex_setprioceiling F GLIBC_2.4 pthread_mutex_setprioceiling F

View file

@ -248,6 +248,7 @@ GLIBC_2.30 pthread_mutex_clocklock F
GLIBC_2.30 pthread_rwlock_clockrdlock F GLIBC_2.30 pthread_rwlock_clockrdlock F
GLIBC_2.30 pthread_rwlock_clockwrlock F GLIBC_2.30 pthread_rwlock_clockwrlock F
GLIBC_2.30 sem_clockwait F GLIBC_2.30 sem_clockwait F
GLIBC_2.31 pthread_clockjoin_np F
GLIBC_2.4 pthread_mutex_consistent_np F GLIBC_2.4 pthread_mutex_consistent_np F
GLIBC_2.4 pthread_mutex_getprioceiling F GLIBC_2.4 pthread_mutex_getprioceiling F
GLIBC_2.4 pthread_mutex_setprioceiling F GLIBC_2.4 pthread_mutex_setprioceiling F

View file

@ -240,6 +240,7 @@ GLIBC_2.30 pthread_mutex_clocklock F
GLIBC_2.30 pthread_rwlock_clockrdlock F GLIBC_2.30 pthread_rwlock_clockrdlock F
GLIBC_2.30 pthread_rwlock_clockwrlock F GLIBC_2.30 pthread_rwlock_clockwrlock F
GLIBC_2.30 sem_clockwait F GLIBC_2.30 sem_clockwait F
GLIBC_2.31 pthread_clockjoin_np F
GLIBC_2.4 pthread_mutex_consistent_np F GLIBC_2.4 pthread_mutex_consistent_np F
GLIBC_2.4 pthread_mutex_getprioceiling F GLIBC_2.4 pthread_mutex_getprioceiling F
GLIBC_2.4 pthread_mutex_setprioceiling F GLIBC_2.4 pthread_mutex_setprioceiling F

View file

@ -238,6 +238,7 @@ GLIBC_2.30 pthread_mutex_clocklock F
GLIBC_2.30 pthread_rwlock_clockrdlock F GLIBC_2.30 pthread_rwlock_clockrdlock F
GLIBC_2.30 pthread_rwlock_clockwrlock F GLIBC_2.30 pthread_rwlock_clockwrlock F
GLIBC_2.30 sem_clockwait F GLIBC_2.30 sem_clockwait F
GLIBC_2.31 pthread_clockjoin_np F
GLIBC_2.4 pthread_mutex_consistent_np F GLIBC_2.4 pthread_mutex_consistent_np F
GLIBC_2.4 pthread_mutex_getprioceiling F GLIBC_2.4 pthread_mutex_getprioceiling F
GLIBC_2.4 pthread_mutex_setprioceiling F GLIBC_2.4 pthread_mutex_setprioceiling F

View file

@ -236,3 +236,4 @@ GLIBC_2.30 pthread_mutex_clocklock F
GLIBC_2.30 pthread_rwlock_clockrdlock F GLIBC_2.30 pthread_rwlock_clockrdlock F
GLIBC_2.30 pthread_rwlock_clockwrlock F GLIBC_2.30 pthread_rwlock_clockwrlock F
GLIBC_2.30 sem_clockwait F GLIBC_2.30 sem_clockwait F
GLIBC_2.31 pthread_clockjoin_np F